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リポジトリを運用することのリスクを回避することが出来ます。
以上がリカバリカタログを使用する手順となります。