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

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


以上