データベースの完全リストアとリカバリ

完全リストアとリカバリの必要要件

  1. 現行の制御ファイルが破損していない。
  2. 使用可能なデータ・ファイルのバックアップのメディア・リカバリに必要なアーカイブ・ログおよび増分バックアップの完全なセットが存在する。
  3. バックアップが存在しないデータ・ファイルの場合、そのデータ・ファイル作成時のオンライン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 on46 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;

個々の表領域またはデータ・ファイルのリストアおよび完全リカバリ

  1. ターゲット・データベースおよびリカバリ・カタログ・データベース(該当する場合)に接続し、データベースがマウントされているか、またはオープン状態であるかを確認する。
  2. 影響を受けた表領域がオフラインになっていない場合は、ALTER TABLESPACE … OFFLINE IMMEDIATEを実行してオフラインにする。
  3. RESTOREコマンドで表領域またはデータベースをリストアし、RECOVERコマンドでリカバリする。
  4. リカバリ時に、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 on47 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>
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License