RMAN備份恢復之控制檔案的恢復(二)

yangtingkun發表於2007-07-23

控制檔案對於資料庫來說至關重要,在資料庫的恢復過程中,首先需要恢復初始化引數檔案,然後就是控制檔案的恢復。

RMAN採用CATALOG方式還是NOCATALOG方式,以及是否啟用了AUTOBACKUP,決定了控制檔案的恢復方法。

RMAN備份恢復之控制檔案的恢復(一):http://yangtingkun.itpub.net/post/468/305766

這篇文章介紹NOCATALOG方式下通過CONTROLFILE AUTOBACKUP來恢復控制檔案。


NOCATALOG方式下,如果控制檔案的自動備份是開啟的,那麼控制檔案丟失後,也可以方便的利用控制檔案的自動備份進行恢復。

F:>sqlplus "/@test1 as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on 星期一 7月 23 21:37:28 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


連線到:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> host move F:oracleoradata est1control01.ctl F:oracleoradata est1control01.bak

SQL> host move F:oracleoradata est1control02.ctl F:oracleoradata est1control02.bak

SQL> host move F:oracleoradata est1control03.ctl F:oracleoradata est1control03.bak

SQL> exit
從Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production中斷開

F:>

上面刪除了控制檔案,這個時候資料庫已經無法開啟了:

F:>sqlplus "/@test1 as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on 星期一 7月 23 21:44:02 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

已連線到空閒例程。

SQL> startup
ORACLE 例程已經啟動。

Total System Global Area 110173900 bytes
Fixed Size 454348 bytes
Variable Size 83886080 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-00205: ?????????????????????


SQL> shutdown
ORA-01507: ??????


ORACLE 例程已經關閉。
SQL>
SQL> exit
從Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production中斷開

下面嘗試使用RMAN恢復控制檔案:

F:>rman target /@test1

恢復管理器: 版本9.2.0.4.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

已連線到目標資料庫 (未啟動)

RMAN> startup nomount

Oracle 例程已啟動

系統全域性區域總計 110173900 位元組

Fixed Size 454348 位元組
Variable Size 83886080 位元組
Database Buffers 25165824 位元組
Redo Buffers 667648 位元組

RMAN> restore controlfile from autobackup;

啟動 restore 於 23-7月 -07

正在使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=11 devtype=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 07/23/2007 22:04:17
RMAN-06495: must explicitly specify DBID with SET DBID command

RMAN> set dbid 974710760

正在執行命令: SET DBID

RMAN> show controlfile autobackup format;

RMAN 配置引數為:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default

RMAN> set controlfile autobackup format for device type disk to 'f:oracleackup\%F';

正在執行命令: SET CONTROLFILE AUTOBACKUP FORMAT

RMAN> restore controlfile from autobackup;

啟動 restore 於 23-7月 -07

使用通道 ORA_DISK_1
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070723
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070722
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070721
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070720
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070719
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070718
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070717
通道 ORA_DISK_1: 沒有找到 7 天之內的自動備份
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 07/23/2007 22:07:28
RMAN-06172: no autobackup found or specified handle is not a valid copy or piece


RMAN> restore controlfile from autobackup maxdays 20;

啟動 restore 於 23-7月 -07

使用通道 ORA_DISK_1
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070723
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070722
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070721
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070720
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070719
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070718
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070717
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070716
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070715
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070714
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070713
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070712
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070711
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070710
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070709
通道 ORA_DISK_1: 尋找以下日期的自動備份: 20070708
通道 ORA_DISK_1: 已找到的自動備份: f:oracleackupc-974710760-20070708-00
通道 ORA_DISK_1: 從自動備份復原控制檔案已完成
正在複製控制檔案
輸出檔名=F:ORACLEORADATATEST1CONTROL01.CTL
輸出檔名=F:ORACLEORADATATEST1CONTROL02.CTL
輸出檔名=F:ORACLEORADATATEST1CONTROL03.CTL
完成 restore 於 23-7月 -07

RMAN> alter database mount;

資料庫已載入

RMAN> alter database open;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 07/23/2007 22:08:44
ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項

RMAN> alter database open resetlogs;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 07/23/2007 22:08:53
ORA-01152: 檔案 1 沒有從完備的舊備份中恢復
ORA-01110: 資料檔案 1: 'F:ORACLEORADATATEST1SYSTEM01.DBF'

RMAN> recover database;

啟動 recover 於 23-7月 -07
使用通道 ORA_DISK_1

正在開始介質的恢復

存檔日誌執行緒 1 序列 2 已作為檔案 F:ORACLEORADATATEST1REDO01.LOG 存在於磁碟上

存檔日誌執行緒 1 序列 3 已作為檔案 F:ORACLEORADATATEST1REDO02.LOG 存在於磁碟上

存檔日誌執行緒 1 序列 4 已作為檔案 F:ORACLEORADATATEST1REDO03.LOG 存在於磁碟上

無法找到存檔日誌
存檔日誌執行緒 =1 序列=0
Oracle 錯誤:
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01152: 檔案 1 沒有從完備的舊備份中恢復
ORA-01110: 資料檔案 1: 'F:ORACLEORADATATEST1SYSTEM01.DBF'

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/23/2007 22:09:17
RMAN-06054: media recovery requesting unknown log: thread 1 scn 58880369

RMAN> catalog archivelog 'F:oracleoradata est1ARCHIVELOGARC00001.001';

已編目的存檔日誌
存檔日誌檔名 =F:ORACLEORADATATEST1ARCHIVELOGARC00001.001 記錄 ID=35 時間戳 =628726349

RMAN> recover database;

啟動 recover 於 23-7月 -07
使用通道 ORA_DISK_1

正在開始介質的恢復

存檔日誌執行緒 1 序列 1 已作為檔案 F:ORACLEORADATATEST1ARCHIVELOGARC00001.001
存在於磁碟上
存檔日誌執行緒 1 序列 2 已作為檔案 F:ORACLEORADATATEST1REDO01.LOG 存在於磁碟上

存檔日誌執行緒 1 序列 3 已作為檔案 F:ORACLEORADATATEST1REDO02.LOG 存在於磁碟上

存檔日誌執行緒 1 序列 4 已作為檔案 F:ORACLEORADATATEST1REDO03.LOG 存在於磁碟上

存檔日誌檔名 =F:ORACLEORADATATEST1ARCHIVELOGARC00001.001 執行緒 =1 序列 =0
存檔日誌檔名 =F:ORACLEORADATATEST1REDO01.LOG 執行緒 =1 序列 =2
存檔日誌檔名 =F:ORACLEORADATATEST1REDO02.LOG 執行緒 =1 序列 =3
存檔日誌檔名 =F:ORACLEORADATATEST1REDO03.LOG 執行緒 =1 序列 =4
完成介質的恢復
完成 recover 於 23-7月 -07

RMAN> alter database open resetlogs;

資料庫已開啟

RMAN>

上面碰到的第一個錯誤:RMAN-06495是由於沒有設定DBID造成的,通過控制檔名稱中包含的DBID資訊設定DBID,並且根據控制檔案的位置設定控制檔案自動備份的目錄和格式。

第二個錯誤:RMAN-06172是由於控制檔案的生成日期早於恢復預設查詢日期(7天),通過設定MAXDAYS來避免這個錯誤的產生。

第三個錯誤說明恢復了控制檔案後,資料庫必須以RESETLOGS方式開啟。

第四個錯誤表示,由於恢復了以前備份的控制檔案,目前資料庫資料檔案和控制檔案不一致,因此必須要進行恢復。

最後一個錯誤是由於歸檔日誌的產生晚於控制檔案,因此控制檔案中沒有包括歸檔的資訊,於是在恢復的過程中由於沒有找到第一個歸檔資訊,而導致恢復無法完成。通過CATALOG命令使得RMAN記錄了歸檔資訊後,恢復完成。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69359/,如需轉載,請註明出處,否則將追究法律責任。

相關文章