お試し:RMANによるSYSTEM表領域のリストア、リカバリ<!-- --> | <!-- -->塩焼き太郎のブログ♪
塩焼き太郎のブログ♪

お試し:RMANによるSYSTEM表領域のリストア、リカバリ

Posted: July 25, 2017

DBAにとって障害からの復旧は基本のロールである。

というわけでRMANの勉強を始めた。

題名の通り、今回はSYSTEM表領域に障害が起きた時の復旧作業である。

環境:Oracle Database Multitenant Architecture
状態:OPEN
SYSTEM表領域のデータファイルの場所:/home/oracle/db/oracle/testdb/data/system01.dbf

  1. バックアップの取得

リストアのためにSYSTEM表領域のバックアップを事前に取得する。

oracle$ rman target / RMAN> backup datafile '/home/oracle/db/oracle/testdb/data/system01.dbf'; Starting backup at 20170725_20:57:10 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00001 name=/home/oracle/db/oracle/testdb/data/system01.dbf channel ORA_DISK_1: starting piece 1 at 20170725_20:57:11 channel ORA_DISK_1: finished piece 1 at 20170725_20:57:36 piece handle=/home/oracle/flash/TESTDB/backupset/2017_07_25/o1_mf_nnndf_TAG20170725T205710_dqgdjqcc_.bkp tag=TAG20170725T205710 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25 Finished backup at 20170725_20:57:36 Starting Control File and SPFILE Autobackup at 20170725_20:57:36 piece handle=/home/oracle/flash/TESTDB/autobackup/2017_07_25/o1_mf_s_950302656_dqgdkk9z_.bkp comment=NONE Finished Control File and SPFILE Autobackup at 20170725_20:57:39

制御ファイルの自動バックアップもONにしているのでSYSTEM表領域のデータファイルだけでなく制御ファイルとSPFILEもバックアップが取得されていることが分かる。

  1. SYSTEM表領域のデータファイルの物理削除

データファイルを削除します。

oracle$ rm /home/oracle/db/oracle/testdb/data/system01.dbf

ためしにsystemユーザーでログインしようとするもできず。

ERROR: ORA-02002: error while writing to audit trail ORA-01116: error in opening database file 1 ORA-01110: data file 1: '/home/oracle/db/oracle/testdb/data/system01.dbf' ORA-27041: unable to open file Linux-x86_64 Error: 2: No such file or directory

アラートログには以下のメッセージ

Checker run found 1 new persistent data failures

RMANでは以下のように確認できる

RMAN> list failure all; Database Role: PRIMARY List of Database Failures ========================= Failure ID Priority Status Time Detected Summary ---------- -------- --------- ----------------- ------- 1482 CRITICAL OPEN 20170725_20:23:41 System datafile 1: '/home/oracle/db/oracle/testdb/data/system01.dbf' is missing
  1. リストア作業

さて、まず、SYSTEM表領域に障害が起きた場合は以下の手順を実施してリストアできる準備をする。
1:shutdown abortでDBを強制停止
2:startup mountでマウント状態にする

上記のコマンドはRMANからでも実施できる。RMANを用いてリストア、リカバリを実施する場合にはRMANコマンドで上記の作業をするのがスムーズである。

というわけでリストアを実施。

RMAN> restore datafile 1; Starting restore at 20170725_21:03:57 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00001 to /home/oracle/db/oracle/testdb/data/system01.dbf channel ORA_DISK_1: reading from backup piece /home/oracle/flash/TESTDB/backupset/2017_07_25/o1_mf_nnndf_TAG20170725T205710_dqgdjqcc_.bkp channel ORA_DISK_1: piece handle=/home/oracle/flash/TESTDB/backupset/2017_07_25/o1_mf_nnndf_TAG20170725T205710_dqgdjqcc_.bkp tag=TAG20170725T205710 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:15 Finished restore at 20170725_21:04:12

問題なくリストアされた模様。ちなみにリストアで使用されたbackup pieceは
/home/oracle/flash/TESTDB/backupset/2017_07_25/o1_mf_nnndf_TAG20170725T205710_dqgdjqcc_.bkp
だとメッセージで出ているが、これは

RMAN> list backup; ... ... BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ ----------------- 25 Full 758.40M DISK 00:00:18 20170725_20:57:29 BP Key: 25 Status: AVAILABLE Compressed: NO Tag: TAG20170725T205710 Piece Name: /home/oracle/flash/TESTDB/backupset/2017_07_25/o1_mf_nnndf_TAG20170725T205710_dqgdjqcc_.bkp List of Datafiles in backup set 25 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- ----------------- ---- 1 Full 6283638194 20170725_20:57:11 /home/oracle/db/oracle/testdb/data/system01.dbf

さきほどバックアップしたものであることが分かる。

  1. リカバリの実施とDBのオープン

ここまでくればあとはリカバリを実施しDBをオープンすれば良い。
オープン時にリカバリが必要な場合は以下のようにメッセージが出るのでメッセージに従ってリカバリを実施する。

RMAN> alter database open; RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of sql statement command at 07/25/2017 20:48:27 ORA-01113: file 1 needs media recovery ORA-01110: data file 1: '/home/oracle/db/oracle/testdb/data/system01.dbf' RMAN> recover datafile 1; Starting recover at 20170725_20:48:51 using channel ORA_DISK_1 starting media recovery archived log for thread 1 with sequence 8 is already on disk as file /arch/1_8_948652501.dbf archived log for thread 1 with sequence 9 is already on disk as file /arch/1_9_948652501.dbf archived log for thread 1 with sequence 10 is already on disk as file /arch/1_10_948652501.dbf archived log for thread 1 with sequence 11 is already on disk as file /arch/1_11_948652501.dbf archived log file name=/arch/1_8_948652501.dbf thread=1 sequence=8 archived log file name=/arch/1_9_948652501.dbf thread=1 sequence=9 media recovery complete, elapsed time: 00:00:01 Finished recover at 20170725_20:48:53 RMAN> alter database open; Statement processed

以上