oracle备份信息在控制文件丢失,恢复之利用备份在所有控制文件丢失情况下恢复(一)...
如果全部控制文件丟失,但是包含以前控制文件的備份,這時可以利用備份的控制文件進行恢復,不過在恢復后需要以RESETLOGS方式打開數據庫。
根據聯機重做日志文件是否可用和數據文件是否是最新的可以分為四種不同情況,這篇文章描述的是,聯機重做日志可用,且數據文件是最新的情況。
一般重做日志全部丟失的話,數據庫肯定會馬上關閉。本測試為了模擬聯機日志中包含待恢復數據的情況,在后臺運行存儲過程插入數據時,在另外的session使用SHUTDOWN ABORT關閉數據庫。
SQL> CONN /@TEST AS SYSDBA
已連接。
SQL> SHUTDOWN ABORT
ORACLE 例程已經關閉。
數據庫關閉后刪除所有控制文件。
SQL> HOST DEL F:ORACLEORADATATEST*.CTL
然后利用備份的控制文件進行恢復
SQL> HOST COPY F:ORACLEBACKUPTEST20060215*.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
數據庫裝載完畢。
利用備份的控制文件啟動,需要使用USING BACKUP CONTROLFILE語句。
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
ORA-00279: 更改 45609576 (在 02/15/2006 19:28:34 生成) 對于線程 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00059.001
ORA-00280: 更改 45609576 對于線程 1 是按序列 # 59 進行的
指定日志: {=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: 更改 45610708 (在 02/16/2006 01:35:15 生成) 對于線程 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00060.001
ORA-00280: 更改 45610708 對于線程 1 是按序列 # 60 進行的
ORA-00278: 此恢復不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00059.001'
ORA-00279: 更改 45610901 (在 02/16/2006 01:36:55 生成) 對于線程 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00061.001
ORA-00280: 更改 45610901 對于線程 1 是按序列 # 61 進行的
ORA-00278: 此恢復不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00060.001'
ORA-00279: 更改 45612925 (在 02/16/2006 01:39:10 生成) 對于線程 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00062.001
ORA-00280: 更改 45612925 對于線程 1 是按序列 # 62 進行的
ORA-00278: 此恢復不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00061.001'
ORA-00308: 無法打開存檔日志 'F:ORACLEORADATATESTARCHIVEARC00062.001'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 文件1需要更多的恢復來保持一致性
ORA-01110: 數據文件 1: 'F:ORACLEORADATATESTSYSTEM01.DBF'
最后出現的錯誤是由于SHUTDOWN ABORT后,使用備份的控制文件造成的。Oracle需要應用當前的重做日志文件來進行恢復,但是由于使用了備份的控制文件,備份之后的歸檔日志信息丟失,因此,這時需要手工輸入需要恢復的聯機重做日志文件。
其實這個時候是可以通過REDO的循環(huán)使用推斷出最后需要使用的聯機日志的。
SQL> SELECT GROUP#, SEQUENCE#, STATUS FROM V$LOG;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 59 CURRENT
2 57 INACTIVE
3 58 INACTIVE
這時已經可以推斷GROUP2將是60,GROUP3是61,而GROUP1則是62。不過在輸入重做日志進行恢復時,即使輸入錯文件也沒有關系,Oracle會提示錯誤。如果輸入正確的重做日志,則Oracle會完成介質恢復。
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
ORA-00279: 更改 45612925 (在 02/16/2006 01:39:10 生成) 對于線程 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00062.001
ORA-00280: 更改 45612925 對于線程 1 是按序列 # 62 進行的
指定日志: {=suggested | filename | AUTO | CANCEL}
F:ORACLEORADATATESTREDO03.LOG
ORA-00310: 存檔日志包含序列 61;要求序列 62
ORA-00334: 歸檔日志: 'F:ORACLEORADATATESTREDO03.LOG'
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 文件1需要更多的恢復來保持一致性
ORA-01110: 數據文件 1: 'F:ORACLEORADATATESTSYSTEM01.DBF'
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
ORA-00279: 更改 45612925 (在 02/16/2006 01:39:10 生成) 對于線程 1 是必需的
ORA-00289: 建議: F:ORACLEORADATATESTARCHIVEARC00062.001
ORA-00280: 更改 45612925 對于線程 1 是按序列 # 62 進行的
指定日志: {=suggested | filename | AUTO | CANCEL}
F:ORACLEORADATATESTREDO01.LOG
已應用的日志。
完成介質恢復。
SQL> ALTER DATABASE OPEN RESETLOGS;
數據庫已更改。
恢復到這里已經完成,現在需要做的是馬上進行數據庫的備份。
總結
以上是生活随笔為你收集整理的oracle备份信息在控制文件丢失,恢复之利用备份在所有控制文件丢失情况下恢复(一)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu 18.04 ip固定
- 下一篇: jasperreport转成html,J