データベースのPoint-in-Timeリカバリ

データベースのPoint-in-Timeリカバリの概念

データベースのPoint-in-Timeリカバリの要件
  1. データベースがARCHIVELOGモードで実行している必要がある。
  2. DBPITRのターゲットSCNより前のすべてのデータ・ファイルのバックアップ、およびバックアップのSCNとターゲットSCNの間の期間のアーカイブREDOログが存在する必要がある。

データベースのPoint-in-Timeリカバリの準備

リカバリを終了する必要がある目標時点、SCN、リストア・ポイントまたはログ順序番号を決定する
  1. Oracle Flashback Query、Oracle Flashback Version QueryおよびOracle Flashback Transaction Query機能は、いつ論理的な破損が発生したかを識別するのに役立つ。
  2. alert.logで、リカバリが必要なイベントの時間を決定するのに役立つ情報を確認できる。
  3. ターゲットSCNを含むログ順序番号を設定し、このログまでリカバリすることもできる。
Recovery Managerを起動する前に時刻書式の環境変数を適切に設定する

グローバリゼーション・サポート設定の例
NLS_LANG = american_america.us7ascii
NLS_DATE_FORMAT="Mon DD YYYY HH24:MI:SS"

Point-in-Timeリカバリ

現行のインカネーション内でのPoint-in-Timeリカバリ
SQL> select * from v$log_history;    -- V$LOG_HISTORYでSCN情報を確認し、SCN=463946までリカバリすることを決める
 
     RECID      STAMP    THREAD#  SEQUENCE# FIRST_CHANGE# FIRST_TI NEXT_CHANGE# RESETLOGS_CHANGE# RESETLOG
---------- ---------- ---------- ---------- ------------- -------- ------------ ----------------- --------
         1  681605336          1          1             1 09-03-15        56123                 1 09-03-15
         2  681605460          1          2         56123 09-03-15        83732                 1 09-03-15
     ... ...
       128  683515233          1        128        463839 09-04-07       463881                 1 09-03-15
       129  683515343          1        129        463881 09-04-07       463898                 1 09-03-15
       130  683515379          1        130        463898 09-04-07       463946                 1 09-03-15
       131  683515383          1        131        463946 09-04-07       463962                 1 09-03-15
 
131 rows selected.
 
SQL> shutdown immediate        -- DBをシャットダウンする
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;        -- DBをマウントする
ORACLE instance started.
 
Total System Global Area  314572800 bytes
Fixed Size                  1260612 bytes
Variable Size              92275644 bytes
Database Buffers          218103808 bytes
Redo Buffers                2932736 bytes
Database mounted.
SQL> exit;
 
[oracle@db-node01 ~]$ rman target / catalog rman/oracle@OMR    -- RMANを接続する。
 
Recovery Manager: Release 10.2.0.2.0 - Production on48 01:12:23 2009
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
connected to target database: PROD (DBID=93443355, not open)
connected to recovery catalog database
 
RMAN> RUN {                -- SET UNTIL SCNでリカバリする目標SCNを指定し、DBPITRを実施する。
    SET UNTIL SCN 463946;
    RESTORE DATABASE;
    RECOVER DATABASE;
}
 
executing command: SET until clause
 
Starting restore at 09-04-08
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=346 devtype=DISK
 
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /u01/app/oracle/oradata/PROD/system01.dbf
restoring datafile 00002 to /u01/app/oracle/oradata/PROD/undotbs01.dbf
restoring datafile 00003 to /u01/app/oracle/oradata/PROD/sysaux01.dbf
restoring datafile 00004 to /u01/app/oracle/oradata/PROD/users01.dbf
restoring datafile 00005 to /u02/app/oracle/oradata/PROD/batch_01.dbf
restoring datafile 00006 to /u02/app/oracle/oradata/PROD/indx_01.dbf
restoring datafile 00007 to /u02/app/oracle/oradata/PROD/example_01.dbf
restoring datafile 00008 to /u02/app/oracle/oradata/PROD/oltp_01.dbf
channel ORA_DISK_1: reading from backup piece /u04/app/oracle/oradata/PROD/rman/PROD_amkbr7ec_1_1_20090407.bak
channel ORA_DISK_1: restored backup piece 1
piece handle=/u04/app/oracle/oradata/PROD/rman/PROD_amkbr7ec_1_1_20090407.bak tag=TAG20090407T012220
channel ORA_DISK_1: restore complete, elapsed time: 00:00:45
Finished restore at 09-04-08
 
Starting recover at 09-04-08
using channel ORA_DISK_1
 
starting media recovery
 
archive log thread 1 sequence 130 is already on disk as file /u04/app/oracle/oradata/PROD/arch1/PROD_1_130_681605019.arc
channel ORA_DISK_1: starting archive log restore to default destination
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=129
channel ORA_DISK_1: reading from backup piece /u04/app/oracle/oradata/PROD/rman/PROD_ankbr7eg_1_1_20090407.bak
channel ORA_DISK_1: restored backup piece 1
piece handle=/u04/app/oracle/oradata/PROD/rman/PROD_ankbr7eg_1_1_20090407.bak tag=TAG20090407T012224
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
archive log filename=/u04/app/oracle/oradata/PROD/arch2/PROD_1_129_681605019.arc thread=1 sequence=129
media recovery complete, elapsed time: 00:00:03
Finished recover at 09-04-08
 
RMAN> alter database open resetlogs;        -- DBPITRを成功に実施したため、RESETLOGSオプションでデータベースをオープン
 
database opened
new incarnation of database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
 
RMAN> LIST INCARNATION;        -- インカネーション情報にRESETLOGSによって作られた新しいインカネーションを確認できる。
 
List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
191     192     PROD     93443355         PARENT  1          09-03-15
191     10594   PROD     93443355         CURRENT 463947     09-04-08
 
RMAN>
祖先インカネーションまでのPoint-in-Timeリカバリ

上記のDBTIPRリカバリを実行した後、新しいインカネーションが作られて、下記は、祖先インカネーション192のSCN:463962までリカバリする操作を検証する。

SQL> STARTUP FORCE NOMOUNT;        -- データベースをノーマウントにする。
ORACLE instance started.
 
Total System Global Area  314572800 bytes
Fixed Size                  1260612 bytes
Variable Size              92275644 bytes
Database Buffers          218103808 bytes
Redo Buffers                2932736 bytes
SQL>
[oracle@db-node01 ~]$ rman target / catalog rman/oracle@OMR    -- RMANに接続する。
 
Recovery Manager: Release 10.2.0.2.0 - Production on48 01:50:36 2009
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
connected to target database: PROD (not mounted)
connected to recovery catalog database
 
RMAN> RESET DATABASE TO INCARNATION 192;        -- データベースのインカネーションを祖先の192に設定する。
 
database reset to incarnation 192
 
RMAN> RESTORE CONTROLFILE;                -- 自動バックアップから祖先インカネーションの制御ファイルをリストアする。
 
Starting restore at 09-04-08
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=346 devtype=DISK
 
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: reading from backup piece /u04/app/oracle/oradata/PROD/rman/ctl_c-93443355-20090407-09
channel ORA_DISK_1: restored backup piece 1
piece handle=/u04/app/oracle/oradata/PROD/rman/ctl_c-93443355-20090407-09 tag=TAG20090407T012306
channel ORA_DISK_1: restore complete, elapsed time: 00:00:04
output filename=/u01/app/oracle/oradata/PROD/control01.dbf
output filename=/u01/app/oracle/oradata/PROD/control02.dbf
output filename=/u01/app/oracle/oradata/PROD/control03.dbf
Finished restore at 09-04-08
 
RMAN> ALTER DATABASE MOUNT;        -- データベースをマウントにする。
 
database mounted
released channel: ORA_DISK_1
 
RMAN> RUN {
2> SET UNTIL SCN 463962;        -- リカバリ目標SCNを設定し、データベースのリカバリとリストアを実行
3> RESTORE DATABASE;
4> RECOVER DATABASE;
5> }
 
executing command: SET until clause
 
Starting restore at 09-04-08
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=346 devtype=DISK
 
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /u01/app/oracle/oradata/PROD/system01.dbf
restoring datafile 00002 to /u01/app/oracle/oradata/PROD/undotbs01.dbf
restoring datafile 00003 to /u01/app/oracle/oradata/PROD/sysaux01.dbf
restoring datafile 00004 to /u01/app/oracle/oradata/PROD/users01.dbf
restoring datafile 00005 to /u02/app/oracle/oradata/PROD/batch_01.dbf
restoring datafile 00006 to /u02/app/oracle/oradata/PROD/indx_01.dbf
restoring datafile 00007 to /u02/app/oracle/oradata/PROD/example_01.dbf
restoring datafile 00008 to /u02/app/oracle/oradata/PROD/oltp_01.dbf
channel ORA_DISK_1: reading from backup piece /u04/app/oracle/oradata/PROD/rman/PROD_amkbr7ec_1_1_20090407.bak
channel ORA_DISK_1: restored backup piece 1
piece handle=/u04/app/oracle/oradata/PROD/rman/PROD_amkbr7ec_1_1_20090407.bak tag=TAG20090407T012220
channel ORA_DISK_1: restore complete, elapsed time: 00:00:45
Finished restore at 09-04-08
 
Starting recover at 09-04-08
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile 00001: /u01/app/oracle/oradata/PROD/system01.dbf
destination for restore of datafile 00002: /u01/app/oracle/oradata/PROD/undotbs01.dbf
destination for restore of datafile 00003: /u01/app/oracle/oradata/PROD/sysaux01.dbf
destination for restore of datafile 00004: /u01/app/oracle/oradata/PROD/users01.dbf
destination for restore of datafile 00005: /u02/app/oracle/oradata/PROD/batch_01.dbf
destination for restore of datafile 00006: /u02/app/oracle/oradata/PROD/indx_01.dbf
destination for restore of datafile 00007: /u02/app/oracle/oradata/PROD/example_01.dbf
destination for restore of datafile 00008: /u02/app/oracle/oradata/PROD/oltp_01.dbf
channel ORA_DISK_1: reading from backup piece /u04/app/oracle/oradata/PROD/rman/PROD_aqkbr7fm_1_1_20090407.bak
channel ORA_DISK_1: restored backup piece 1
piece handle=/u04/app/oracle/oradata/PROD/rman/PROD_aqkbr7fm_1_1_20090407.bak tag=TAG20090407T012302
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
 
starting media recovery
 
archive log thread 1 sequence 131 is already on disk as file /u04/app/oracle/oradata/PROD/arch1/PROD_1_131_681605019.arc
archive log filename=/u04/app/oracle/oradata/PROD/arch1/PROD_1_131_681605019.arc thread=1 sequence=131
media recovery complete, elapsed time: 00:00:00
Finished recover at 09-04-08
 
RMAN> ALTER DATABASE OPEN RESETLOGS;        -- RESETLOGSオプションでデータベースをオープンする。
 
database opened
new incarnation of database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
 
RMAN>
Point-in-TimeリカバリのSET UNTIL時刻及び他のオプションの指定

RUNブロックでリカバリするまでの時刻指定

RMAN> RUN { SET UNTIL TIME "TO_DATE('20090408020800','YYYYMMDDHH24MISS')"; }    -- 時間関数の利用
 
executing command: SET until clause
 
RMAN> RUN { SET UNTIL TIME "SYSDATE-1/1440";}    -- システム時刻の利用
 
executing command: SET until clause
 
RMAN> RUN { SET UNTIL TIME 'Nov 15 2004 09:00:00'; }    -- 環境変数NLS_LANGおよびNLS_DATE_FORMATで指定した日付書式に合わせ、時刻を直接に指定

他のオプションの指定
SET UNTIL SEQUENCE 9923;  
SET UNTIL RESTORE POINT before_update;
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License