12章 リカバリカタログ
本章ではリカバリカタログについて確認していきます。
RMANリポジトリ
RMANで取得したバックアップの情報は制御ファイルに存在するRMANリポジトリに格納されています。
RMANコマンドはこのRMANリポジトリから情報読み取って、リストアするバックアップファイルが
どこかに存在するかを確認しています。
 
RMANリポジトリの情報は永遠に保持されるわけではなく、制御ファイルの空きが少なくなると、
削除されます。この保持期間は初期化パラメータcontrol_file_record_keep_timeで制御されおり、
デフォルトは7日間です。
最低7日間は保持され、領域がなくなると7日経過した過去の情報から上書きされます。
RMANはこのように制御ファイルにRMANリポジトリを格納している為、制御ファイルが破損したり、control_file_record_keep_timeの日数を経過した管理情報はなくなる可能性があります。
また制御ファイルが破損してしまった場合も、復旧時にRMANリポジトリの情報がなくなってします懸念もあります。
このような状況になった場合、RMANは適切なバックアップファイルを使用してリカバリを行うことが難しくなります。
リカバリカタログとは
リカバリカタログとは制御ファイルにRMANリポジトリを使用する懸念を解決する為の機能です。
RMANリポジトリを現データベースの制御ファイルに格納するのではなく、RMANリポジトリ専用のデータベースに格納します。
 
この方法により、現データベースがリストアされても、保持日数(control_file_record_keep_time)もない為、
半永久的にバックアップの管理情報を保持することが出来ます。
またリカバリカタログは別データベースからも共有可能である為、複数データベースのバックアップ情報を保持することが出来ます。
本来であれば専用データベースを作成し、そのデータベース上にリカバリカタログを作成することもできますが、既存のDBにリカバリカタログ用の情報を作成することも可能です。
また12cであれば、リカバリカタログ専用のPDBを作成することも簡単にできるので、よりリカバリカタログを作成しやすくなりました。
リカバリカタログの作成
それではリカバリカタログを作成してみます。リカバリカタログはもう1つ別の通常のデータベースを作成するだけであるため、、
SYSTEM表領域やUNDO表領域も存在します。ただしRMANリポジトリ用のデータベースである為、サイズは小さくても問題ありません。
一般的な領域要件を示します。
一般的なリカバリ・カタログ領域要件
| SYSTEM表領域 | 90MB | 
| 一時表領域 | 5MB | 
| UNDO表領域 | 5MB | 
リカバリ・カタログ表領域 リカバリ・カタログに登録されたデータベースごとに15MB
オンラインREDOログ ログごとに1MB(3グループ、各グループに2メンバー)
RMAN情報を格納する領域である為、上記の要件どおりデータベースは小さいものでかまいません。
リカバリカタログ作成の流れ
1.リカバリカタログ用ユーザの作成
2.リカバリカタログ用テーブルの作成
3.リカバリカタログへデータベースの登録
1.リカバリカタログ用ユーザの作成
まずはデータベース上でリカバリカタログで使用するユーザを作成します。
今回は同じデータベース上にリカバリカタログ用のユーザを作成します。
  $ sqlplus / as sysdba
  SQL> CREATE USER rman IDENTIFIED BY rman
    2  TEMPORARY TABLESPACE temp
    3  DEFAULT TABLESPACE users
    4  QUOTA UNLIMITED ON users;
  User created.
  SQL> GRANT RECOVERY_CATALOG_OWNER TO rman;
  Grant succeeded.
  SQL> exit
rmanというDBユーザを作成しました。この名前は任意である為、どのような名前でもかまいません。
また「RECOVERY_CATALOG_OWNER」ロールによって、リカバリカタログのメンテナンスおよび問合せに必要なすべての権限がユーザーに付与されます。
2.リカバリカタログ用テーブルの作成
次にリカバリカタログで使用するテーブルを作成します。
この作業はRMANコマンドで実行し、リカバリカタログのデータベースにテーブルを作成します。
  $ rman target / CATALOG rman@orcl
  Recovery Manager: Release 12.1.0.1.0 - Production on XX XX XX XX:XX:XX 2016
  Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.
  connected to target database: ORCL (DBID=397531058)
  recovery catalog database Password:
  connected to recovery catalog database
  RMAN> CREATE CATALOG TABLESPACE users;
  recovery catalog created
  RMAN> exit
  Recovery Manager complete.
上記の「rman target / CATALOG rman@orcl」はCATALOGオプションを使用して、
RMANリポジトリの情報はリカバリカタログの情報を利用しています。
「CREATE CATALOG」コマンドによりリカバリカタログのデータベース(今回はorcl)にテーブルが作成されます。
実際に作成されているかどうかを確認してみます。
  $ sqlplus rman/rman@orcl
  SQL> SELECT TABLE_NAME FROM USER_TABLES;
  TABLE_NAME
  -----------------------------------------------
  CFS
  XMLSTORE
  SERVER
  RCFILE
  ORSEVENT
  OAM_PENDING_JOBS
  AL
  BS
  BP
  BCF
  DB
  …省略・・・
  54 rows selected.
  SQL> desc DB
  
   Name                                      Null?    Type
   ----------------------------------------- -------- ----------------------------
   DB_KEY                                    NOT NULL NUMBER
   DB_ID                                     NOT NULL NUMBER
   REG_DB_UNIQUE_NAME                                 VARCHAR2(30)
   CURR_DBINC_KEY                                     NUMBER
   STORAGE_PROV
  SQL> select * from DB;
  no rows selected
  SQL> exit
色々なテーブルが作成されました。
DBという名前のテーブルにはデータベースの情報が登録されそうです。
3.リカバリカタログへデータベースの登録
次に作成されたテーブルに現在のRMANリポジトリの情報を格納していきます。
  $ rman target / CATALOG rman@orcl
  RMAN> list backup;
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-03002: failure of list command at 09/13/2016 11:39:40
  RMAN-06004: ORACLE error from recovery catalog database: RMAN-20001: target 
  database not found in recovery catalog
  上記はリカバリカタログ上での情報であり、まだデータベース情報を登録していない為、
  エラーとなっています。
  
  それではデータベースの情報を登録してみましょう。
  RMAN> REGISTER DATABASE;
  database registered in recovery catalog
  starting full resync of recovery catalog
  full resync complete
リカバリカタログに接続し、「list backup」を実行しましたがまだRMANリポジトリの情報はない為、エラーとなっています。
「REGISTER DATABASE」コマンドを実行すると、既存のRMANリポジトリの情報がリカバリカタログに登録されます。
それではもう一度実行してみます。
  RMAN> list backup;
  List of Backup Sets
  ===================
  BS Key  Type LV Size       Device Type Elapsed Time Completion Time
  ------- ---- -- ---------- ----------- ------------ ---------------
  1639    Full    682.05M    DISK        00:00:22     01-SEP-16
          BP Key: 1646   Status: AVAILABLE  Compressed: NO  Tag: TAG20160901T140800
          Piece Name: /home/oracle/flash_recovery_area/ORCL/backupset/2016_09_01
          /o1_mf_nnndf_TAG20160901T140800_cwhfxjz4_.bkp
    
    List of Datafiles in backup set 1639
    File LV Type Ckp SCN    Ckp Time  Name
    ---- -- ---- ---------- --------- ----
    1       Full 481031188  01-MAR-17 /home/oracle/12101/oradata/ORCL/system01.dbf
    
  RMAN> exit
  Recovery Manager complete.
REGISTERコマンドにより、制御ファイルにあるRMAN情報が、カタログデータベースのテーブルに登録され、
カタログデータベースから情報を取得することが可能となりました。
ちなみに、先ほどDBテーブルが存在していたので、登録されたか確認してみましょう。
  SQL> select * from DB;
      DB_KEY      DB_ID REG_DB_UNIQUE_NAME             CURR_DBINC_KEY S
  ---------- ---------- ------------------------------ -------------- -
           1  397531058 ORCL                                        2 N
データベースの情報が格納されていますね。データベースの名前と一意であるDB_IDが登録されているので、
複数データベースの情報をリカバリカタログで登録することができるのですね。
リカバリカタログの管理
リカバリカタログを使用したバックアップリカバリは、RMAN実行時はCATALOGオプションで接続して実行します。
接続時以外は特に変わりはありません。
  $ rman target / CATALOG rman@orcl
  RMAN> list backup;
  starting full resync of recovery catalog
  full resync complete
  specification does not match any backup in the repository
  RMAN> backup tablespace system;
  Starting backup at 25-APR-17
  allocated channel: ORA_DISK_1
  channel ORA_DISK_1: SID=85 device type=DISK
  channel ORA_DISK_1: starting full datafile backup set
  channel ORA_DISK_1: specifying datafile(s) in backup set
  input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
  channel ORA_DISK_1: starting piece 1 at 25-APR-17
  ・・・
リストアの場合も特に接続以外変わりはありません。
  $ rman target / CATALOG rman_user@orcl
  RMAN> restore database;
上記のようにRMANにログインする際にCATALOGオプションを使用し、カタログデータベースに接続するだけで、バックアップリカバリ操作は今までと変わりありません。
リカバリカタログを作成することで制御ファイルでRMANリポジトリを運用することのリスクを回避することが出来ます。
以上がリカバリカタログを使用する手順となります。