前面說過的,在非恢復目錄(catalog)模式下,rman的備份信息都將存儲在目標數據庫的控制文件中,因此一旦控制文件丟失,不只目標數據庫崩潰,並且rman備份信息也盡數丟失,這種狀況下,若是您有控制文件備份,那還有救(沒有備份的話,也並不是徹底沒有但願,若是您對本身的oracle結構很是瞭解,能夠經過寫腳本的方式自已重建控制文件。看看oracle是否是考慮的很周全了,不少狀況下你認爲沒救了的時候,也並不是徹底陷入絕境)。web
本章將模擬歸檔模式下,控制文件丟失狀況下的恢復,在本例中,咱們仍然藉助上節中創建的備份作恢復,你們應該還記的。sql
在應用備份恢復時,必須知道目標數據庫的DBID,有多種方式可查,好比咱們建立自動備份時,若是沒有更改其命名方式,文件名中會包含DBID;或者查看以前的rman備份日誌,其中登錄到rman以後會顯示出目標數據庫的DBID數據庫
SQL> select *from jss.tmp3; COL -------------------------------------------------- test4 test1 test2 test3 SQL> shutdown immediate; 數據庫已經關閉。 已經卸載數據庫。 ORACLE 例程已經關閉。 SQL> host del F:\OraHome1\oradata\jssweb\CONTROL *; SQL> EXIT; C:\Documents and Settings\Administrator>rman target / 恢復管理器: 版本9.2.0.1.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. 鏈接到目標數據庫: jssweb(未安裝) RMAN> set dbid 3391142503 ##### 因爲目標數據庫控制文件丟失,在此處必須指定dbid 正在執行命令: SET DBID RMAN> restore controlfile from ¨d:\backup\C-3391142503-20070718-04¨; ######## 若是打開了自動備份,經過restore controlfile from autobackup也能夠 ######## 不過須要 注意 ,由於控制文件沒有了,因此rman的配置信息也丟失了,你須要用 set controlfile autobackup format for device type disk to ¨d:\backup\%F¨;命令重設一個自動備份的控制文件所在路徑。 啓動 restore 於 18-7月 -07 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在恢復控制文件 通道 ORA_DISK_1: 恢復完成 正在複製控制文件 輸出文件名=F:\ORAHOME1\ORADATA\JSSWEB\CONTROL01.CTL 輸出文件名=F:\ORAHOME1\ORADATA\JSSWEB\CONTROL02.CTL 輸出文件名=F:\ORAHOME1\ORADATA\JSSWEB\CONTROL03.CTL 完成 restore 於 18-7月 -07 RMAN> sql ¨alter database mount¨; ####### 控制文件已恢復,將目標數據庫置爲加載狀態 正在使用目標數據庫控制文件替代恢復目錄 sql 語句: alter database mount RMAN> restore database; ######## 修復數據庫 啓動 restore 於 18-7月 -07 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=12 devtype=DISK 通道 ORA_DISK_1: 正在開始恢復數據文件備份集 通道 ORA_DISK_1: 正在指定從備份集恢復的數據文件 正將數據文件00001恢復到F:\ORAHOME1\ORADATA\JSSWEB\SYSTEM01.DBF 正將數據文件00002恢復到F:\ORAHOME1\ORADATA\JSSWEB\UNDOTBS01.DBF 正將數據文件00003恢復到F:\ORAHOME1\ORADATA\JSSWEB\DRSYS01.DBF 正將數據文件00004恢復到F:\ORAHOME1\ORADATA\JSSWEB\EXAMPLE01.DBF 正將數據文件00005恢復到F:\ORAHOME1\ORADATA\JSSWEB\INDX01.DBF 正將數據文件00006恢復到F:\ORAHOME1\ORADATA\JSSWEB\ODM01.DBF 正將數據文件00007恢復到F:\ORAHOME1\ORADATA\JSSWEB\TOOLS01.DBF 正將數據文件00008恢復到F:\ORAHOME1\ORADATA\JSSWEB\USERS01.DBF 正將數據文件00009恢復到F:\ORAHOME1\ORADATA\JSSWEB\XDB01.DBF 正將數據文件00010恢復到F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA 通道 ORA_DISK_1: 已恢復備份段 1 段 handle=D:\BACKUP\1AIN4JU5_1_1 tag=TAG20070718T092837 params=NULL 通道 ORA_DISK_1: 恢復完成 完成 restore 於 18-7月 -07 RMAN> recover database; ######## 恢復數據庫 啓動 recover 於 18-7月 -07 使用通道 ORA_DISK_1 正在開始介質的恢復 存檔日誌線程 1 序列 7 已做爲文件 F:\ORAHOME1\ORADATA\JSSWEB\REDOC02.LOG 存在於 盤上 存檔日誌線程 1 序列 8 已做爲文件 F:\ORAHOME1\ORADATA\JSSWEB\REDOA01.LOG 存在於 盤上 存檔日誌線程 1 序列 9 已做爲文件 F:\ORAHOME1\ORADATA\JSSWEB\REDOB02.LOG 存在於 盤上 通道 ORA_DISK_1: 正在啓動到默認目標的存檔日誌恢復 通道 ORA_DISK_1: 正在恢復存檔日誌 存檔日誌線程 =1 序列=5 通道 ORA_DISK_1: 已恢復備份段 1 段 handle=D:\BACKUP\1BIN4K16_1_1 tag=TAG20070718T093014 params=NULL 通道 ORA_DISK_1: 恢復完成 存檔日誌文件名 =F:\ORAHOME1\RDBMS\ARC00005.001 線程 =1 序列 =5 存檔日誌文件名 =F:\ORAHOME1\RDBMS\ARC00006.001 線程 =1 序列 =6 存檔日誌文件名 =F:\ORAHOME1\ORADATA\JSSWEB\REDOC02.LOG 線程 =1 序列 =7 存檔日誌文件名 =F:\ORAHOME1\ORADATA\JSSWEB\REDOA01.LOG 線程 =1 序列 =8 存檔日誌文件名 =F:\ORAHOME1\ORADATA\JSSWEB\REDOB02.LOG 線程 =1 序列 =9 完成介質的恢復 完成 recover 於 18-7月 -07 RMAN> sql ¨alter database open resetlogs¨; ###### 因爲使用備份的控制文件恢復,該文件內不包含目標數據庫redologs和數據文件頭部scn信息,因此必須經過resetlogs方式open。 sql 語句: alter database open resetlogs RMAN> host; Microsoft Windows [ 版本 5.2.3790] (C) 版權全部 1985-2003 Microsoft Corp. C:\Documents and Settings\Administrator>sqlplus jss/jss SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 7月 18 17:40:28 2007 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. 鏈接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production SQL> select *from tmp3; COL -------------------------------------------------- test4 test1 test2 test3 ####### 成功恢復,數據也沒有丟失 SQL> exit 從Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production 中斷開 C:\Documents and Settings\Administrator>exit 主機命令完成 RMAN>
注意,恢復以後表忘了重建臨時表空間。另外,因爲resetlogs,建議當即對數據庫進行一次徹底備份。oracle