Oracle リカバリカタログデータベース設定メモ


## リカバリカタログデータベース作成

1. インスタンスを作成　(SID:RECAT)

1. sqlplusにてログイン

    ```bash:
    $ sqlplus / as sysdba
    ```

1. リカバリカタログ用の表領域作成 

    ```sql:
    SQL> CREATE TABLESPACE catalog DATAFILE '/u01/app/oracle/oradata/RECAT/catalog01.dbf' SIZE 15M;
    
    表領域が作成されました。
    
    SQL> SELECT TABLESPACE_NAME, FILE_NAME, bytes/1024/1024 MB FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='CATALOG';
    
    TABLESPACE_NAME      FILE_NAME                                                  MB
    -------------------- -------------------------------------------------- ----------
    CATALOG              /u01/app/oracle/oradata/RECAT/catalog01.dbf                15
    ```

1. リカバリカタログ用のスキーマ所有者作成

    リカバリ・カタログの所有者を作成し、リカバリ・カタログのオーナーとなるために必要なRECOVERY_CATALOG_OWNERロールを付与。

    ```sql:
    SQL> CREATE USER recat IDENTIFIED BY recat
      2  TEMPORARY TABLESPACE TEMP
      3  DEFAULT TABLESPACE CATALOG
      4  QUOTA UNLIMITED ON CATALOG;
    
    ユーザーが作成されました。
    
    SQL> GRANT RECOVERY_CATALOG_OWNER TO recat;
    
    権限付与が成功しました。
    ```

1. sqlplusからログアウト

    ```sql:
    SQL> exit
    ```


1. リカバリカタログの作成

    ```sql:
    $ rman catalog recat/recat
    RMAN> CREATE CATALOG;
    
    リカバリ・カタログが作成されました。
    
    RMAN> EXIT;
    ```


## ターゲットデータベースの登録

ターゲットデータベース「TEST01」「TEST02」の2台を、リカバリデータベースに
登録する。

1. TEST01
    
    ```sql:
    $ rman TARGET sys/oracle@TEST01 CATALOG recat/recat
    
    ターゲット・データベース: TEST01 (データベースID= 111111111)に接続されました
    リカバリ・カタログ・データベースに接続されました。
    
    RMAN> REGISTER DATABASE;
    
    データベースがリカバリ・カタログに登録されました。
    リカバリ・カタログの完全再同期を開始しています
    完全再同期が完了しました
    
    RMAN> REPORT SCHEMA;
    
    データベースdb_unique_name TEST01のデータベース・スキーマのレポート
    
    永続データファイルのリスト
    ===========================
    File Size(MB) Tablespace           RB segs Datafile Name
    ---- -------- -------------------- ------- ------------------------
    1    750      SYSTEM               YES     /u01/app/oracle/oradata/TEST01/system01.dbf
    2    600      SYSAUX               NO      /u01/app/oracle/oradata/TEST01/sysaux01.dbf
    3    770      UNDOTBS1             YES     /u01/app/oracle/oradata/TEST01/undotbs01.dbf
    4    5        USERS                NO      /u01/app/oracle/oradata/TEST01/users01.dbf
    
    一時ファイルのリスト
    =======================
    File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
    ---- -------- -------------------- ----------- --------------------
    1    59       TEMP                 32767       /u01/app/oracle/oradata/TEST01/temp01.dbf
    
    RMAN> EXIT
    
    Recovery Managerが完了しました。
    
    ```


1. TEST02

    ```sql:
    $ rman TARGET sys/oracle@TEST02 CATALOG recat/recat
    
    ターゲット・データベース: TEST02 (データベースID= 222222222)に接続されました
    リカバリ・カタログ・データベースに接続されました。
    
    RMAN> REGISTER DATABASE;
    
    データベースがリカバリ・カタログに登録されました。
    リカバリ・カタログの完全再同期を開始しています
    完全再同期が完了しました

    RMAN> REPORT SCHEMA;
    
    データベースdb_unique_name TEST02のデータベース・スキーマのレポート
    
    永続データファイルのリスト
    ===========================
    File Size(MB) Tablespace           RB segs Datafile Name
    ---- -------- -------------------- ------- ------------------------
    1    750      SYSTEM               YES     /u01/app/oracle/oradata/TEST02/system01.dbf
    2    600      SYSAUX               NO      /u01/app/oracle/oradata/TEST02/sysaux01.dbf
    3    770      UNDOTBS1             YES     /u01/app/oracle/oradata/TEST02/undotbs01.dbf
    4    5        USERS                NO      /u01/app/oracle/oradata/TEST02/users01.dbf
    
    一時ファイルのリスト
    =======================
    File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
    ---- -------- -------------------- ----------- --------------------
    1    59       TEMP                 32767       /u01/app/oracle/oradata/TEST02/temp01.dbf
    
    RMAN> EXIT
    
    Recovery Managerが完了しました。
    
    ```

## 仮想プライベートカタログの設定

以下の通りに作成
    
 - TEST01用ユーザ → vptest01
 - TEST02用ユーザ → vptest02

1. 仮想プライベートカタログ所有者の作成

    
    ```sql:
    $ # リカバリカタログ（RECAT）にログイン
    $ sqlplus / as sysdba
    
    SQL> -- TEST01用ユーザ vptest01
    SQL> CREATE USER vptest01 IDENTIFIED BY vptest01
    TEMPORARY TABLESPACE TEMP
    DEFAULT TABLESPACE CATALOG
    QUOTA UNLIMITED ON CATALOG;
    
    ユーザーが作成されました。
    
    SQL> GRANT RECOVERY_CATALOG_OWNER TO vptest01;
    
    権限付与が成功しました。
    
    SQL> -- TEST02用ユーザ vptest02
    SQL> CREATE USER vptest02 IDENTIFIED BY vptest02
    TEMPORARY TABLESPACE TEMP
    DEFAULT TABLESPACE CATALOG
    QUOTA UNLIMITED ON CATALOG;
    
    ユーザーが作成されました。
    
    SQL> GRANT RECOVERY_CATALOG_OWNER TO vptest02;
    
    権限付与が成功しました。
    
    SQL> EXIT
    
    ```


1. 各仮想プライベートカタログ所有者にアクセス権限を追加

    ```sql:
    $ # recatユーザでrmanログイン
    $ rman CATALOG recat/recat
    RMAN> GRANT CATALOG FOR DATABASE TEST01 TO vptest01;
    
    権限付与が成功しました。
    
    RMAN> GRANT CATALOG FOR DATABASE TEST02 TO vptest02;
    
    権限付与が成功しました。
    
    RMAN> EXIT
    
    ```

    
1. 仮想プライベートカタログの作成
    - vptest01
    
    ```sql:
    $ rman catalog vptest01/vptest01
    RMAN> create virtual catalog;
    
    RECATが所有する適格なベース・カタログが見つかりました
    RECATが所有するベース・カタログに対して仮想カタログが作成されました
    
    RMAN> EXIT
    
    ```
    -  vptest02
    
    ```sql:
    $ rman catalog vptest02/vptest02
    RMAN> create virtual catalog;
    
    RECATが所有する適格なベース・カタログが見つかりました
    RECATが所有するベース・カタログに対して仮想カタログが作成されました
    
    RMAN> EXIT
    
    ```

1. 仮想プライベートカタログの動作確認
    - ターゲットデータベースに接続できる事を確認
    
    ```sql:
    $ rman target sys/oracle@TEST01 catalog vptest01/vptest01
    
    ターゲット・データベース: TEST01 (データベースID=1111111111)に接続されました
    リカバリ・カタログ・データベースに接続されました。
    
    RMAN> report schema;
    
    データベースdb_unique_name TEST01のデータベース・スキーマのレポート
      …（省略）…
    
    RMAN> exit
    
    $ rman target sys/oracle@TEST02 catalog vptest02/vptest02
    
    ターゲット・データベース: TEST02 (データベースID=222222222)に接続されました
    リカバリ・カタログ・データベースに接続されました。
    
    RMAN> report schema;
    
    データベースdb_unique_name TEST01のデータベース・スキーマのレポート
      …（省略）…
    
    RMAN> exit
    
    ```
    - 他のターゲットデータベースに接続できないことを確認
    
    ```sql:
    $ rman target sys/oracle@TEST01 catalog vptest02/vptest02
    
    ターゲット・データベース: TEST01 (データベースID=1111111111)に接続されました
    リカバリ・カタログ・データベースに接続されました。
    
    RMAN> report schema;
    
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: reportコマンドが04/08/2015 17:47:11で失敗しました
    RMAN-06004: リカバリ・カタログ・データベースでのOracleエラー: RMAN-20001: target database not found in recovery catalog
    
    RMAN> exit
    
    $ rman target sys/oracle@TEST02 catalog vptest01/vptest01
    
    ターゲット・データベース: TEST02 (データベースID=222222222)に接続されました
    リカバリ・カタログ・データベースに接続されました。
    
    RMAN> report schema;
    
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: reportコマンドが04/08/2015 17:48:57で失敗しました
    RMAN-06004: リカバリ・カタログ・データベースでのOracleエラー: RMAN-20001: target database not found in recovery catalog
    
    RMAN> exit
    
    ```
    
## 注意事項

リカバリカタログデータベース自身のバックアップも忘れないように。
RMANコマンドでバックアップ可能。