お試し:RMANによるSYSTEM表領域のリストア、リカバリ
Posted: July 25, 2017
DBAにとって障害からの復旧は基本のロールである。
というわけでRMANの勉強を始めた。
題名の通り、今回はSYSTEM表領域に障害が起きた時の復旧作業である。
環境:Oracle Database Multitenant Architecture
状態:OPEN
SYSTEM表領域のデータファイルの場所:/home/oracle/db/oracle/testdb/data/system01.dbf
- バックアップの取得
リストアのために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もバックアップが取得されていることが分かる。
- 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
- リストア作業
さて、まず、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
さきほどバックアップしたものであることが分かる。
- リカバリの実施と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
以上