無數次我對自己說,可以了,足夠了,你已經明白了,需要學習的東西還很多,趕緊沖著下個目標去吧。尤幸的是在下一刻,另一個聲音在腦海中響起,再加把勁,真的搞明白了,親手去做個測試吧。
前面說過的,在非恢復目錄(catalog)模式下,rman的備份信息都將存儲在目標數據庫的控制文件中,所以一旦控制文件丟失,不僅目標數據庫崩潰,而且rman備份信息也盡數丟失,這種情況下,如果您有控制文件備份,那還有救(沒有備份的話,也並非完全沒有希望,如果您對自己的oracle結構非常了解,可以通過寫腳本的方式自已重建控制文件。看看Oracle是不是考慮的很周全了,很多情況下你認為沒救了的時候,也並非完全陷入絕境)。
本章將模擬歸檔模式下,控制文件丟失情況下的恢復,在本例中,我們仍然借助上節中建立的備份做恢復,大家應該還記的。
在應用備份恢復時,必須知道目標數據庫的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,建議立即對數據庫進行一次完全備份。