お試し:RMANによる制御ファイル全損からのリストア、リカバリ
Posted: July 27, 2017
さて、今回は制御ファイル全損からのリストア、リカバリをやってみる。
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
以上、制御ファイル全損からのリストア、リカバリを試した。