制御ファイルのリストア

制御ファイルが全部消失していない場合

多重化にされた制御ファイルのうちに一部の制御ファイルが消失しても、残っている制御ファイルを利用して消失した制御ファイルをコピーすれば、簡単にリストアできる。

[oracle@db-node01 PROD]$ ls -l
total 1734716
-rw-r-----  1 oracle oinstall  12632064 Apr  8 02:41 control01.dbf
-rw-r-----  1 oracle oinstall  12632064 Apr  8 02:41 control02.dbf
-rw-r-----  1 oracle oinstall  12632064 Apr  8 02:41 control03.dbf
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:39 redo01_01.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:39 redo01_02.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:39 redo01_03.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:22 redo02_01.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:22 redo02_02.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:22 redo02_03.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:22 redo03_01.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:22 redo03_02.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:22 redo03_03.log
-rw-r-----  1 oracle oinstall 262148096 Apr  8 02:39 sysaux01.dbf
-rw-r-----  1 oracle oinstall 314576896 Apr  8 02:39 system01.dbf
-rw-r-----  1 oracle oinstall 104861696 Apr  6 22:47 temp01.dbf
-rw-r-----  1 oracle oinstall 134221824 Apr  8 02:39 undotbs01.dbf
-rw-r-----  1 oracle oinstall  67112960 Apr  8 02:22 users01.dbf
[oracle@db-node01 PROD]$ rm control02.dbf                -- 制御ファイルをOSから削除する。
[oracle@db-node01 PROD]$ ls -l
total 1722364
-rw-r-----  1 oracle oinstall  12632064 Apr  8 02:41 control01.dbf
-rw-r-----  1 oracle oinstall  12632064 Apr  8 02:41 control03.dbf
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:39 redo01_01.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:39 redo01_02.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:39 redo01_03.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:22 redo02_01.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:22 redo02_02.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:22 redo02_03.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:22 redo03_01.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:22 redo03_02.log
-rw-r-----  1 oracle oinstall 104858112 Apr  8 02:22 redo03_03.log
-rw-r-----  1 oracle oinstall 262148096 Apr  8 02:39 sysaux01.dbf
-rw-r-----  1 oracle oinstall 314576896 Apr  8 02:39 system01.dbf
-rw-r-----  1 oracle oinstall 104861696 Apr  6 22:47 temp01.dbf
-rw-r-----  1 oracle oinstall 134221824 Apr  8 02:39 undotbs01.dbf
-rw-r-----  1 oracle oinstall  67112960 Apr  8 02:22 users01.dbf
[oracle@db-node01 PROD]$
[oracle@db-node01 ~]$ tail -f /u01/app/oracle/admin/PROD/bdump/alert_PROD.log    -- alertログにエラーメッセージを確認できた。
  Current log# 3 seq# 4 mem# 2: /u01/app/oracle/oradata/PROD/redo03_03.log
Wed Apr  8 02:22:23 2009
Thread 1 advanced to log sequence 5
  Current log# 1 seq# 5 mem# 0: /u01/app/oracle/oradata/PROD/redo01_01.log
  Current log# 1 seq# 5 mem# 1: /u01/app/oracle/oradata/PROD/redo01_02.log
  Current log# 1 seq# 5 mem# 2: /u01/app/oracle/oradata/PROD/redo01_03.log
Wed Apr  8 02:22:27 2009
Starting control autobackup
Control autobackup written to DISK device
        handle '/u04/app/oracle/oradata/PROD/rman/ctl_c-93443355-20090408-02'
Wed Apr  8 02:52:23 2009
Errors in file /u01/app/oracle/admin/PROD/udump/prod_ora_4394.trc:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/app/oracle/oradata/PROD/control02.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
 
SQL> shutdown abort;        -- shutdown abortでデータベースを停止
ORACLE instance shut down.
SQL>
 
[oracle@db-node01 PROD]$ cp control01.dbf control02.dbf        -- OSのコピーコマンドで消失したcontrol02.dbfを再作成
[oracle@db-node01 PROD]$ ls -l
total 1734716
-rw-r-----  1 oracle oinstall  12632064 Apr  8 02:56 control01.dbf
-rw-r-----  1 oracle oinstall  12632064 Apr  8 03:00 control02.dbf
-rw-r-----  1 oracle oinstall  12632064 Apr  8 02:56 control03.dbf
 
SQL> startup mount;        -- データベースをマウントしてオープンする。
ORACLE instance started.
 
Total System Global Area  314572800 bytes
Fixed Size                  1260612 bytes
Variable Size              92275644 bytes
Database Buffers          218103808 bytes
Redo Buffers                2932736 bytes
Database mounted.
SQL> alter database open;
 
Database altered.
 
SQL>

制御ファイルが全部消失した場合

リカバリカタログを使用した場合の制御ファイルのリストア
[oracle@db-node01 PROD]$ rm control0*.dbf    -- OSコマンドで全部の制御ファイルを削除
 
SQL> startup nomount;    -- DBをノーマウントにする。
ORACLE instance started.
 
Total System Global Area  314572800 bytes
Fixed Size                  1260612 bytes
Variable Size              92275644 bytes
Database Buffers          218103808 bytes
Redo Buffers                2932736 bytes
SQL>
 
[oracle@db-node01 PROD]$ rman target / catalog rman/oracle@OMR    -- カタログを指定してRMANに接続
 
Recovery Manager: Release 10.2.0.2.0 - Production on48 03:23:06 2009
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
connected to target database: PROD (not mounted)
connected to recovery catalog database
 
RMAN> restore controlfile;    -- 特に何も設定しなくて、カタログの情報を利用して制御ファイルをリストアできる。
 
Starting restore at 09-04-08
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=346 devtype=DISK
 
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: reading from backup piece /u04/app/oracle/oradata/PROD/rman/ctl_c-93443355-20090408-04
channel ORA_DISK_1: restored backup piece 1
piece handle=/u04/app/oracle/oradata/PROD/rman/ctl_c-93443355-20090408-04 tag=TAG20090408T032122
channel ORA_DISK_1: restore complete, elapsed time: 00:01:08
output filename=/u01/app/oracle/oradata/PROD/control01.dbf
output filename=/u01/app/oracle/oradata/PROD/control02.dbf
output filename=/u01/app/oracle/oradata/PROD/control03.dbf
Finished restore at 09-04-08
 
RMAN> alter database mount;    -- DBをマウントする。
 
database mounted
released channel: ORA_DISK_1
 
RMAN> recover database;        -- メディアリカバリを実施
 
Starting recover at 09-04-08
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=346 devtype=DISK
 
starting media recovery
 
archive log thread 1 sequence 3 is already on disk as file /u01/app/oracle/oradata/PROD/redo03_01.log
archive log filename=/u01/app/oracle/oradata/PROD/redo03_01.log thread=1 sequence=3
media recovery complete, elapsed time: 00:00:03
Finished recover at 09-04-08
 
RMAN> alter database open resetlogs;    -- RESETLOGSでデータベースをオープン
 
database opened
new incarnation of database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
 
RMAN>
カタログを使用せずに制御ファイルのリストア
[oracle@db-node01 PROD]$ rm control0*.dbf    -- OSコマンドで制御ファイルを削除
 
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup nomount;    -- データベースをノーマウントにする
ORACLE instance started.
 
Total System Global Area  314572800 bytes
Fixed Size                  1260612 bytes
Variable Size              92275644 bytes
Database Buffers          218103808 bytes
Redo Buffers                2932736 bytes
SQL>
 
[oracle@db-node01 PROD]$ rman target / nocatalog;    -- カタログに接続せずに RMANに接続する。
 
Recovery Manager: Release 10.2.0.2.0 - Production on48 03:39:24 2009
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
connected to target database: PROD (not mounted)
using target database control file instead of recovery catalog
 
RMAN> set dbid 93443355;    -- DBIDを設定する。制御ファイルの自動バックアップファイル名からDBIDの値を取得できる。
 
executing command: SET DBID
 
RMAN> RUN {
    SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u04/app/oracle/oradata/PROD/rman/ctl_%F';    -- 自動バックアップ書式を設定
    RESTORE CONTROLFILE FROM AUTOBACKUP;    自動バックアップから制御ファイルをリストア
}
 
executing command: SET CONTROLFILE AUTOBACKUP FORMAT
 
Starting restore at 09-04-08
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=346 devtype=DISK
 
channel ORA_DISK_1: looking for autobackup on day: 20090408
channel ORA_DISK_1: autobackup found: /u04/app/oracle/oradata/PROD/rman/ctl_c-93443355-20090408-06
channel ORA_DISK_1: control file restore from autobackup complete
output filename=/u01/app/oracle/oradata/PROD/control01.dbf
output filename=/u01/app/oracle/oradata/PROD/control02.dbf
output filename=/u01/app/oracle/oradata/PROD/control03.dbf
Finished restore at 09-04-08
 
RMAN> alter database mount;    -- データベースをマウントにする。
 
database mounted
released channel: ORA_DISK_1
 
RMAN> recover database;        -- データベースのメディアリカバリ
 
Starting recover at 09-04-08
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=346 devtype=DISK
 
starting media recovery
 
archive log thread 1 sequence 3 is already on disk as file /u01/app/oracle/oradata/PROD/redo02_01.log
archive log filename=/u01/app/oracle/oradata/PROD/redo02_01.log thread=1 sequence=3
media recovery complete, elapsed time: 00:00:04
Finished recover at 09-04-08
 
RMAN> alter database open resetlogs;    -- RESETLOGSでデータベースをオープン
 
database opened
 
RMAN>
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License