恢復之非歸檔模式下的恢復

zhengbao_jun發表於2009-02-11

當出現人為故障或部分歸檔日誌檔案損壞的情況,可能會進行不完整恢復。不完整恢復包括三種情況,基於取消、基於時間和基於改變。這個例子是說明基於改變的不完整恢復。


如果打算進行不完整恢復,第一件事情就是備份當前的資料庫。保證在不完整恢復出現錯誤時可以用這個備份進行恢復。

首先將資料庫關閉,並根據需要進行資料檔案還原。

如果當前的控制檔案可以反映恢復時間點的狀態,則利用當前的控制檔案,否則利用合適和控制檔案備份進行恢復或重建控制檔案。

還原資料檔案時,需要保證還原的資料檔案備份要比恢復時間點早。原則上,需要還原所有的資料檔案,但是對於恢復時間點之後建立的資料檔案就不需要進行還原了。

SQL> COL NAME FORMAT A50
SQL> SELECT NAME FROM V$DATAFILE;

NAME
--------------------------------------------------
F:ORACLEORADATATESTSYSTEM01.DBF
F:ORACLEORADATATESTUNDOTBS01.DBF
F:ORACLEORADATATESTINDX01.DBF
F:ORACLEORADATATESTTOOLS02.DBF
F:ORACLEORADATATESTUSERS01.DBF
F:ORACLEORADATATESTYANGTK01.DBF

已選擇6行。

SQL> CONN /@TEST AS SYSDBA
已連線。
SQL> SHUTDOWN ABORT
ORACLE 例程已經關閉。
SQL> HOST COPY F:ORACLEBACKUPTEST20060219*.DBF F:ORACLEORADATATEST

SQL> HOST COPY F:ORACLEBACKUPTEST20060219*.CTL F:ORACLEORADATATEST

SQL> STARTUP MOUNT
ORACLE 例程已經啟動。

Total System Global Area 76619308 bytes
Fixed Size 454188 bytes
Variable Size 50331648 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。

SQL> SELECT NAME, STATUS FROM V$DATAFILE;

NAME STATUS
-------------------------------------------------- -------
F:ORACLEORADATATESTSYSTEM01.DBF SYSTEM
F:ORACLEORADATATESTUNDOTBS01.DBF ONLINE
F:ORACLEORADATATESTINDX01.DBF ONLINE
F:ORACLEORADATATESTTOOLS01.DBF ONLINE
F:ORACLEORADATATESTUSERS01.DBF ONLINE
F:ORACLEORADATATESTYANGTK01.DBF ONLINE

已選擇6行。

例子模仿利用備份中的控制檔案進行不完全恢復的過程。

注意:在恢復之前資料檔案TOOLS02.DBF,而通過查詢備份控制檔案中的資料檔名稱為TOOLS01.DBF,說明這個檔案在備份後修改了名稱。由於備份中的資料檔案就是TOOLS01.DBF,且使用的是備份的控制檔案,因此,不需要修改資料檔案的名稱。

檢查資料檔案的狀態,將所有需要恢復且處於離線狀態的資料檔案聯機。本例中所有資料檔案均處於聯機狀態。

SQL> RECOVER DATABASE UNTIL CHANGE 45900000 USING BACKUP CONTROLFILE
ORA-00279: 更改 45822802 (在 02/19/2006 03:07:36 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00001.001
ORA-00280: 更改 45822802 對於執行緒 1 是按序列 # 1 進行的


指定日誌: {=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: 更改 45843504 (在 02/19/2006 10:39:18 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00002.001
ORA-00280: 更改 45843504 對於執行緒 1 是按序列 # 2 進行的
ORA-00278: 此恢復不再需要日誌檔案 'F:ORACLEORADATATESTARCHIVEARC00001.001'


ORA-00279: 更改 45858111 (在 02/19/2006 22:11:29 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00003.001
ORA-00280: 更改 45858111 對於執行緒 1 是按序列 # 3 進行的
ORA-00278: 此恢復不再需要日誌檔案 'F:ORACLEORADATATESTARCHIVEARC00002.001'


ORA-00279: 更改 45858519 (在 02/19/2006 22:12:23 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00004.001
ORA-00280: 更改 45858519 對於執行緒 1 是按序列 # 4 進行的
ORA-00278: 此恢復不再需要日誌檔案 'F:ORACLEORADATATESTARCHIVEARC00003.001'


ORA-00279: 更改 45878533 (在 02/19/2006 22:37:48 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00005.001
ORA-00280: 更改 45878533 對於執行緒 1 是按序列 # 5 進行的
ORA-00278: 此恢復不再需要日誌檔案 'F:ORACLEORADATATESTARCHIVEARC00004.001'


ORA-00279: 更改 45898798 (在 02/20/2006 06:28:48 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00006.001
ORA-00280: 更改 45898798 對於執行緒 1 是按序列 # 6 進行的
ORA-00278: 此恢復不再需要日誌檔案 'F:ORACLEORADATATESTARCHIVEARC00005.001'


已應用的日誌。
完成介質恢復。

上面的步驟中將資料庫恢復到SCN 45900000時刻。Oracle的恢復到這個SCN後自動退出恢復過程。由於使用的是備份的控制檔案,需要加上USING BACKUP CONTROLFILE語句。

最後,以RESETLOGS方式開啟資料庫即可。

SQL> ALTER DATABASE OPEN RESETLOGS;

資料庫已更改。

如果是正式環境下進行的恢復,則在資料庫開啟後馬上進行全庫備份。

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

相關文章