データベースの完全リストアとリカバリ
完全リストアとリカバリの必要要件
- 現行の制御ファイルが破損していない。
- 使用可能なデータ・ファイルのバックアップのメディア・リカバリに必要なアーカイブ・ログおよび増分バックアップの完全なセットが存在する。
- バックアップが存在しないデータ・ファイルの場合、そのデータ・ファイル作成時のオンラインREDOログまたはアーカイブREDOログの完全なセットが存在する。
データベース全体のリストアおよびリカバリ
基本コマンド
RESTORE DATABASE:データベース全体をリストア
RECOVER DATABASE:データベース全体をリカバリ
オプション:
- DELETE ARCHIVELOG:リストアしたログ・ファイルがデータ・ファイルに適用された後に削除され、ディスク領域を節約できる。
- MAXSIZE nnM:常に、リストアしたログに使用される領域がnnMBに制限される。
現行の制御ファイルが使用可能な場合にデータベースを完全にリストアおよびリカバリする方法
RMANでフルバックアップを取得
RMAN> backup database plus archivelog delete all input;
テストのため、OSからいくつのデータファイルを削除してインスタンス障害をさせる。
[oracle@db-node01 PROD]$ ls -l
total 820040
-rw-r----- 1 oracle oinstall 134221824 Apr 6 23:05 batch_01.dbf
-rw-r----- 1 oracle oinstall 536875008 Apr 6 23:05 example_01.dbf
-rw-r----- 1 oracle oinstall 33558528 Apr 6 23:05 indx_01.dbf
-rw-r----- 1 oracle oinstall 67112960 Apr 6 23:05 oltp_01.dbf
[oracle@db-node01 PROD]$ rm *
[oracle@db-node01 PROD]$ ls -l
total 0
[oracle@db-node01 PROD]$
データベースをシャットダウンしようとすると、エラーが出る。下記はアラートログの一部
Errors in file /u01/app/oracle/admin/PROD/udump/prod_ora_2991.trc:
ORA-01110: data file 5: '/u02/app/oracle/oradata/PROD/batch_01.dbf'
ORA-01116: error in opening database file 5
ORA-01110: data file 5: '/u02/app/oracle/oradata/PROD/batch_01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
Mon Apr 6 23:14:41 2009
Errors in file /u01/app/oracle/admin/PROD/udump/prod_ora_2991.trc:
ORA-01110: data file 6: '/u02/app/oracle/oradata/PROD/indx_01.dbf'
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u02/app/oracle/oradata/PROD/indx_01.dbf'
ORA-27041: unable to open file
データベース完全リストアとリカバリ
-- SQL*PLUSでインスタンスをマウント SQL> startup mount; 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> -- rmanを接続し、データベースの完全リストアを実行 [oracle@db-node01 ~]$ rman target / Recovery Manager: Release 10.2.0.2.0 - Production on 月 4月 6 23:19:34 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. connected to target database: PROD (DBID=93443355, not open) RMAN> RESTORE DATABASE; Starting restore at 09-04-06 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_9qkbqvdi_1_1_20090406.bak channel ORA_DISK_1: restored backup piece 1 piece handle=/u04/app/oracle/oradata/PROD/rman/PROD_9qkbqvdi_1_1_20090406.bak tag=TAG20090406T230522 channel ORA_DISK_1: restore complete, elapsed time: 00:00:36 Finished restore at 09-04-06 RMAN> RECOVER DATABASE; -- データベースの完全リカバリ Starting recover at 09-04-06 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:02 Finished recover at 09-04-06 RMAN> ALTER DATABASE OPEN; -- データベースをオープンする database opened RMAN>
読取り専用表領域を含むデータベースのリカバリ
読取り専用表領域では、リストアおよびリカバリ処理で特別な処理が必要となる場合がある。デフォルトのリストア処理では、読取り専用表領域はスキップされる。読取り専用表領域が、バックアップからリストアされた後に読取り専用となったSCNに存在する場合、データベースの残りがリカバリされる際、この表領域にREDOは適用されない。CHECK READONLYオプションを指定してRESTOREコマンドを実行すると、読取り専用表領域に属するデータ・ファイルで欠落しているものをRecovery Managerでリストアできる。
リストアとリカバリコマンド
RMAN> RESTORE DATABASE CHECK READONLY;
RMAN> RECOVER DATABASE DELETE ARCHIVELOG;
個々の表領域またはデータ・ファイルのリストアおよび完全リカバリ
- ターゲット・データベースおよびリカバリ・カタログ・データベース(該当する場合)に接続し、データベースがマウントされているか、またはオープン状態であるかを確認する。
- 影響を受けた表領域がオフラインになっていない場合は、ALTER TABLESPACE … OFFLINE IMMEDIATEを実行してオフラインにする。
- RESTOREコマンドで表領域またはデータベースをリストアし、RECOVERコマンドでリカバリする。
- リカバリ時に、Recovery Managerによってエラーがレポートされなかった場合は、表領域をオンラインに戻す。
表領域の完全リストアとリカバリ
-- RMANでデータベースの全体バックアップを取っておく RMAN> backup database plus archivelog delete all input; -- OSコマンドでOLTP表領域に属するデータファイルを削除する。 [oracle@db-node01 PROD]$ ls -l total 754432 -rw-r----- 1 oracle oinstall 134221824 Apr 7 00:19 batch_01.dbf -rw-r----- 1 oracle oinstall 536875008 Apr 7 00:19 example_01.dbf -rw-r----- 1 oracle oinstall 33558528 Apr 7 00:19 indx_01.dbf -rw-r----- 1 oracle oinstall 67112960 Apr 7 00:19 oltp_01.dbf [oracle@db-node01 PROD]$ rm oltp_01.dbf [oracle@db-node01 PROD]$ ls -l total 688824 -rw-r----- 1 oracle oinstall 134221824 Apr 7 00:19 batch_01.dbf -rw-r----- 1 oracle oinstall 536875008 Apr 7 00:19 example_01.dbf -rw-r----- 1 oracle oinstall 33558528 Apr 7 00:19 indx_01.dbf [oracle@db-node01 PROD]$ -- OLTP表領域にテーブルを作成しようとするとエラーが返される。 SQL> conn system/oracle Connected. SQL> create table test tablespace OLTP as select * from dba_objects; create table test tablespace OLTP as select * from dba_objects * ERROR at line 1: ORA-01116: error in opening database file 8 ORA-01110: data file 8: '/u02/app/oracle/oradata/PROD/oltp_01.dbf' ORA-27041: unable to open file Linux Error: 2: No such file or directory Additional information: 3 -- データベースがオープンしたまま、RMANに接続し、リストアとリカバリを実行する。 [oracle@db-node01 ~]$ rman target / Recovery Manager: Release 10.2.0.2.0 - Production on 火 4月 7 00:27:29 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. connected to target database: PROD (DBID=93443355) RMAN> SQL "ALTER TABLESPACE OLTP OFFLINE IMMEDIATE"; -- OLTP表領域をオフラインにする。 using target database control file instead of recovery catalog sql statement: ALTER TABLESPACE OLTP OFFLINE IMMEDIATE RMAN> RESTORE TABLESPACE OLTP; -- OLTP表領域をリストアする Starting restore at 09-04-07 allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=330 devtype=DISK channel ORA_DISK_1: starting datafile backupset restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set 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_a2kbr3p7_1_1_20090407.bak channel ORA_DISK_1: restored backup piece 1 piece handle=/u04/app/oracle/oradata/PROD/rman/PROD_a2kbr3p7_1_1_20090407.bak tag=TAG20090407T001951 channel ORA_DISK_1: restore complete, elapsed time: 00:00:04 Finished restore at 09-04-07 RMAN> RECOVER TABLESPACE OLTP; -- OLTP表領域をリカバリする。 Starting recover at 09-04-07 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:01 Finished recover at 09-04-07 RMAN> SQL "ALTER TABLESPACE OLTP ONLINE"; -- 復旧されたOLTP表領域をオンラインにする。 sql statement: ALTER TABLESPACE OLTP ONLINE RMAN>
データファイルの完全リストアとリカバリ
SQL> startup open 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. ORA-01157: cannot identify/lock data file 8 - see DBWR trace file -- データファイル消失 ORA-01110: data file 8: '/u02/app/oracle/oradata/PROD/oltp_01.dbf' SQL> select open_mode from v$database; OPEN_MODE ------------------------------ MOUNTED SQL> -- RMANでリストアとリカバリ RMAN> RESTORE DATAFILE 8; -- マウント状態なので、直接に特定なファイルをリストア Starting restore at 09-04-07 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 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_aekbr51p_1_1_20090407.bak channel ORA_DISK_1: restored backup piece 1 piece handle=/u04/app/oracle/oradata/PROD/rman/PROD_aekbr51p_1_1_20090407.bak tag=TAG20090407T004129 channel ORA_DISK_1: restore complete, elapsed time: 00:00:02 Finished restore at 09-04-07 RMAN> RECOVER DATAFILE 8; -- 該当ファイルにリカバリを実施 Starting recover at 09-04-07 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:01 Finished recover at 09-04-07 RMAN> ALTER DATABASE OPEN; -- データベースをオープンする。 database opened RMAN>
page_revision: 23, last_edited: 1258552853|%e %b %Y, %H:%M %Z (%O ago)





