お試し:RMANによる制御ファイル全損からのリストア、リカバリ

さて、今回は制御ファイル全損からのリストア、リカバリをやってみる。



0. 制御ファイルのバックアップの取得


制御ファイルの自動バックアップをONにしていることを確認

RMAN> show all;
...
...

CONFIGURE CONTROLFILE AUTOBACKUP ON;  ← これ


バックアップを取得する。
念のために手動でバックアップを取得した。

RMAN> BACKUP AS COPY CURRENT CONTROLFILE FORMAT '/tmp/control01.ctl';

Starting backup at 20170727_18:37:12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=32 device type=DISK
channel ORA_DISK_1: starting datafile copy
copying current control file
output file name=/tmp/control01.ctl tag=TAG20170727T183712 RECID=27 STAMP=950467033
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:02
Finished backup at 20170727_18:37:14

Starting Control File and SPFILE Autobackup at 20170727_18:37:14
piece handle=/home/oracle/flash/TESTDB/autobackup/2017_07_27/o1_mf_s_950467034_dqmf2bhm_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 20170727_18:37:15

取得された。


バックアップの取得状況を確認する。

RMAN> list backup;

...
...

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -----------------
28      Full    17.23M     DISK        00:00:00     20170727_18:25:41
        BP Key: 28   Status: AVAILABLE  Compressed: NO  Tag: TAG20170727T182541
        Piece Name: /home/oracle/flash/TESTDB/autobackup/2017_07_27/o1_mf_s_950466341_dqmddox2_.bkp
  SPFILE Included: Modification time: 20170727_18:14:01
  SPFILE db_unique_name: TESTDB
  Control File Included: Ckp SCN: 6283971770   Ckp time: 20170727_18:25:41

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -----------------
29      Full    17.23M     DISK        00:00:00     20170727_18:37:14
        BP Key: 29   Status: AVAILABLE  Compressed: NO  Tag: TAG20170727T183714
        Piece Name: /home/oracle/flash/TESTDB/autobackup/2017_07_27/o1_mf_s_950467034_dqmf2bhm_.bkp
  SPFILE Included: Modification time: 20170727_18:29:32
  SPFILE db_unique_name: TESTDB
  Control File Included: Ckp SCN: 6283972474   Ckp time: 20170727_18:37:14


手動バックアップの際も、自動バックアップが取得されるようだ。安心。


1. 制御ファイルの削除
OSコマンドで制御ファイルを削除する。

oracle$ rm /home/oracle/db/oracle/testdb/ctl/control01.ctl
oracle$ rm /home/oracle/db/oracle/testdb/ctl/control02.ctl

全削除したとたん、さっそくアラートログには以下のメッセージ

Thu Jul 27 18:45:42 2017
Errors in file /home/oracle/db/app/oracle/diag/rdbms/testdb/testdb/trace/testdb_m000_9417.trc:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/home/oracle/db/oracle/testdb/ctl/control01.ctl'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

なお、DB自体にはログインができた。
制御ファイルへの変更が入るように、表領域を作成してみる。

oracle$ sqlplus / as sysdba

SQL>
CREATE TABLESPACE testtbs
DATAFILE '/home/oracle/db/oracle/testdb/data/testtbs01.dbf'
SIZE 20M AUTOEXTEND ON;SQL>   2    3
CREATE TABLESPACE testtbs
*
ERROR at line 1:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/home/oracle/db/oracle/testdb/ctl/control01.ctl'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

上記のエラーが出た。よしよし。では復旧しよう。


2. DBの強制停止、nomountで起動

制御ファイルやSYSTEM表領域といった、クリティカルなファイルに障害が起きる場合は
shutdown abortでDBを強制停止する必要がある。
また、今回、制御ファイルが全損しているのでマウントができない(制御ファイルが読み込めないので)ため
nomountで起動する。

shutdown abort;
startup nomount;

ちなみにこの段階でRMANでlist failureしても何も結果は出なかった。

RMAN> list failure;

using target database control file instead of recovery catalog
no failures found that match specification

3. 制御ファイルのリストア、リカバリ

まずは制御ファイルをリストアする。

RMAN> restore controlfile from autobackup;

Starting restore at 20170727_19:00:39
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=7 device type=DISK

recovery area destination: /home/oracle/flash
database name (or database unique name) used for search: TESTDB
channel ORA_DISK_1: AUTOBACKUP /home/oracle/flash/TESTDB/autobackup/2017_07_27/o1_mf_s_950467034_dqmf2bhm_.bkp found in the recovery area
AUTOBACKUP search with format "%F" not attempted because DBID was not set
channel ORA_DISK_1: restoring control file from AUTOBACKUP /home/oracle/flash/TESTDB/autobackup/2017_07_27/o1_mf_s_950467034_dqmf2bhm_.bkp
channel ORA_DISK_1: control file restore from AUTOBACKUP complete
output file name=/home/oracle/db/oracle/testdb/ctl/control01.ctl
output file name=/home/oracle/db/oracle/testdb/ctl/control02.ctl
Finished restore at 20170727_19:00:41

自動バックアップからリストアが完了。

アラートログには以下の出力。

No controlfile conversion


制御ファイルがリストアできたのでマウントしリカバリを実施実施する。

RMAN> alter database mount;
Statement processed
released channel: ORA_DISK_1

RMAN> recover database;

Starting recover at 20170727_19:03:03
Starting implicit crosscheck backup at 20170727_19:03:03
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=7 device type=DISK
Crosschecked 15 objects
Finished implicit crosscheck backup at 20170727_19:03:03

Starting implicit crosscheck copy at 20170727_19:03:03
using channel ORA_DISK_1
Crosschecked 4 objects
Finished implicit crosscheck copy at 20170727_19:03:04

searching for all files in the recovery area
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /home/oracle/flash/TESTDB/autobackup/2017_07_27/o1_mf_s_950467034_dqmf2bhm_.bkp

using channel ORA_DISK_1

starting media recovery

archived log for thread 1 with sequence 35 is already on disk as file /home/oracle/db/oracle/testdb/redo/redo02.log
archived log file name=/home/oracle/db/oracle/testdb/redo/redo02.log thread=1 sequence=35
media recovery complete, elapsed time: 00:00:00
Finished recover at 20170727_19:03:05

4. DBの起動

DBをオープンする。RESETLOGSオプション付きでないと起動しないので注意。

RMAN> alter database open resetlogs;

Statement processed


ログ順序番号がリセットされていることを確認。

oracle$ sqlplus / as sysdba
SQL> select group#, thread#, sequence#, status from v$log;
    GROUP#    THREAD#  SEQUENCE# STATUS
---------- ---------- ---------- ----------------------------------------------------------------
	 1	    1	       1 CURRENT
	 2	    1	       0 UNUSED
	 3	    1	       0 UNUSED


以上、制御ファイル全損からのリストア、リカバリを試した。