LoginSignup
6
4

More than 5 years have passed since last update.

退避させてたアーカイブログを制御ファイルに認識させてからのリカバリ

Last updated at Posted at 2016-08-07

シナリオ

  • 制御ファイルバックアップを用いての不完全リカバリ
  • 制御ファイルバックアップ後に生成されたアーカイブログは、アーカイブログ出力先とは別の場所に退避されている(夜間に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.

参考

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4