シナリオ
- 制御ファイルバックアップを用いての不完全リカバリ
- 制御ファイルバックアップ後に生成されたアーカイブログは、アーカイブログ出力先とは別の場所に退避されている(夜間にDBのバックアップする運用だが、諸般の事情でアーカイブログだけ日中もバックアップしてるイメージ)
- 障害シナリオとしては、制御ファイル、データファイル、オンラインREDOログ、退避前のアーカイブログファイルがすべてロスト
環境
- Oracle Database 12c 12.1.0.2
- ファイルシステム
- SingleDB
コマンド
制御ファイルのリストア
データベースをNOMOUNTで起動し、制御ファイルのバックアップからのリストア後、MOUNT状態にします
$ sqlplus / as sysdba
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 3221225472 bytes
Fixed Size 2929552 bytes
Variable Size 1744833648 bytes
Database Buffers 805306368 bytes
Redo Buffers 13844480 bytes
In-Memory Area 654311424 bytes
SQL> host
$ cp -p /u02/app/oracle/bk/controlfile.bk01 /u02/app/oracle/oradata/ORCL/control01.ctl
$ cp -p /u02/app/oracle/bk/controlfile.bk01 /u03/app/oracle/fast_recovery_area/ORCL/control02.ctl
$ exit
exit
SQL> alter database mount;
Database altered.
制御ファイルに退避していたアーカイブログを登録する
RMANでcrosscheckして、アーカイブログがなくなっていることを認識させます
SQL> host
$ rman target /
RMAN> crosscheck archivelog all;
RMAN> exit
Recovery Manager complete.
$ exit
exit
SQL>
SQL>
SQL> set lines 200
col name for a90
select name,status,thread#,sequence#,first_change#,next_change# from v$archived_log;SQL> SQL>
NAME S THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
------------------------------------------------------------------------------------------ - ---------- ---------- ------------- ------------
D 1 1 1969552 1992490
D 1 2 1992490 2029539
D 1 3 2029539 2030862
退避させたアーカイブログを登録するSQLを生成します
アーカイブログは/u02/app/oracle/arcに退避させている前提です
SQL> host
$ ls -l /u02/app/oracle/arc/*
-rwxr-x--- 1 oracle oinstall 99586048 Jul 30 17:23 /u02/app/oracle/arc/o1_mf_1_1_cssrmxwr_.arc
-rw-r----- 1 oracle oinstall 73051648 Jul 31 01:06 /u02/app/oracle/arc/o1_mf_1_2_cstmrx1m_.arc
-rw-r----- 1 oracle oinstall 1882112 Jul 31 01:43 /u02/app/oracle/arc/o1_mf_1_3_cstoyzbx_.arc
-rw-r----- 1 oracle oinstall 30720 Jul 31 01:45 /u02/app/oracle/arc/o1_mf_1_4_cstp1w5z_.arc
-rw-r----- 1 oracle oinstall 2560 Jul 31 01:45 /u02/app/oracle/arc/o1_mf_1_5_cstp28tm_.arc
-rw-r----- 1 oracle oinstall 3072 Jul 31 01:45 /u02/app/oracle/arc/o1_mf_1_6_cstp2gyl_.arc
$ ls /u02/app/oracle/arc/*|awk '{print "alter database register physical logfile \047" $1 "\047;"}' > register.sql
$ exit
exit
SQL> !ls register.sql
register.sql
SQL> !cat register.sql
alter database register physical logfile '/u02/app/oracle/arc/o1_mf_1_1_cssrmxwr_.arc';
alter database register physical logfile '/u02/app/oracle/arc/o1_mf_1_2_cstmrx1m_.arc';
alter database register physical logfile '/u02/app/oracle/arc/o1_mf_1_3_cstoyzbx_.arc';
alter database register physical logfile '/u02/app/oracle/arc/o1_mf_1_4_cstp1w5z_.arc';
alter database register physical logfile '/u02/app/oracle/arc/o1_mf_1_5_cstp28tm_.arc';
alter database register physical logfile '/u02/app/oracle/arc/o1_mf_1_6_cstp2gyl_.arc';
SQLを実行し、制御ファイルが認識していることを確認します
マニュアルには「alter database register logfile」とあるが「alter database register physical logfile」でないとうまくいかなかった
SQL> set echo on
SQL> @register.sql
SQL> alter database register physical logfile '/u02/app/oracle/arc/o1_mf_1_1_cssrmxwr_.arc';
Database altered.
<中略>
SQL> select name,status,thread#,sequence#,first_change#,next_change# from v$archived_log;
NAME S THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
------------------------------------------------------------------------------------------ - ---------- ---------- ------------- ------------
D 1 1 1969552 1992490
D 1 2 1992490 2029539
D 1 3 2029539 2030862
/u02/app/oracle/arc/o1_mf_1_1_cssrmxwr_.arc A 1 1 1969552 1992490
/u02/app/oracle/arc/o1_mf_1_2_cstmrx1m_.arc A 1 2 1992490 2029539
/u02/app/oracle/arc/o1_mf_1_3_cstoyzbx_.arc A 1 3 2029539 2030862
/u02/app/oracle/arc/o1_mf_1_4_cstp1w5z_.arc A 1 4 2030862 2030925
/u02/app/oracle/arc/o1_mf_1_5_cstp28tm_.arc A 1 5 2030925 2030935
/u02/app/oracle/arc/o1_mf_1_6_cstp2gyl_.arc A 1 6 2030935 2030943
9 rows selected.
リカバリし、RESETLOGSでOPEN
アーカイブログを適用して、RESETLOGSでOPENします
SQL> RECOVER DATABASE using backup controlfile until cancel
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
<中略>
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
SQL>
SQL> alter database open resetlogs;
Database altered.
参考
Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド 12cリリース1 (12.1) B71297-05 31 ユーザー管理のリカバリの実行: 高度な例
https://docs.oracle.com/cd/E57425_01/121/BRADV/osadvsce.htmawk内でシングルコーテーションを使いたい
http://qiita.com/okb_m/items/1c173e037ba42935a2a4