REDO檔案丟失的恢復__沒有任何備份的情況
以下為沒有任何備份的前提下,但是控制檔案、其他所有檔案都是OK的情況下
online redo inactive\unused檔案丟失,可以恢復,只要啟動到mount狀態,alter database clear logfile即可
比如手工刪除了active狀態的group 1的所有日誌檔案,啟動的時候報錯ORA-00313: open failed for members of log group 1 of thread 1
SQL> startup mount;
SQL> alter database clear logfile group 1;
SQL> alter database open;
online redo active檔案丟失,無法恢復。
SQL> select GROUP#,THREAD#,SEQUENCE#,STATUS from v$log;
GROUP# THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
1 1 10 CURRENT
3 1 9 ACTIVE
2 1 8 ACTIVE
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> alter database clear logfile group 2;
alter database clear logfile group 2
*
ERROR at line 1:
ORA-01624: log 2 needed for crash recovery of instance orcl (thread 1)
ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/orcl/redo02.log'
online redo current檔案丟失,基本上是無法恢復了
沒有任何備份的環境下online redo current檔案丟失(歸不歸檔都一樣),一般恢復不過來。但仍有如下大概的恢復方法,無法保證一定能成功,運氣好的話可能成功。
遇到這樣的問題,一般是如下場景
SQL>startup mount;
RMAN> restore database;
RMAN> recover database;
RMAN>alter database open resetlogs;
後會有如下提示
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/app/oracle/oradata/DB/system01.dbf'
這是因為當前的redo log寫入不完整導致庫無法開啟,我們需要使用強制open資料庫的方式,使其跳過資料庫對redo和undo 表空間的檢驗。
恢復方法
1.備份所有資料檔案(強制開庫後所有檔案都會有一次寫入行為,如果強制開庫失敗,可能會導致最後一招DUL資料抽取工具都無法使用)
2.擷取出報錯ORA-01110中資料檔案的UNDO資訊,如上為system01.dbf
strings system01.dbf | grep _SYSSMU | cut -d $ -f 1 | sort -u
3.根據上面顯示的UNDO資訊,在pfile中新增引數_CORRUPTED_ROLLBACK_SEGMENTS,如下_SYSSMU1$表示以1開頭的所有UNDO資訊,一般如下配置就包括了所有的UNDO資訊,1開頭到9開頭的所有UNDO
_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$)
4.pfile中繼續新增如下引數
UNDO_MANAGEMENT=MANUAL
_ALLOW_RESETLOGS_CORRUPTION = TRUE
5.啟動資料到mount狀態
SQL>startup mount pfile='/..../init.ora'
SQL>show parameter corrupt;
SQL>show parameter undo
6.Recover and open the database:
SQL>RECOVER DATABASE UNTIL CANCEL;
==>輸入CANCEL
SQL>ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE OPEN RESETLOGS
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
ORA-00600: internal error code, arguments: [2662], [2380], [2470549886],
[2380], [2470550245], [12583040], [], [], [], [], [], []
ORA-00600: internal error code, arguments: [2662], [2380], [2470549885],
[2380], [2470550245], [12583040], [], [], [], [], [], []
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00600: internal error code, arguments: [2662], [2380], [2470549881],
[2380], [2470550245], [12583040], [], [], [], [], [], []
Process ID: 4066
Session ID: 3753 Serial number: 3
7.如果上面報錯ora-00600 [2662],則需要推進SCN,執行一次10015 level 1表示推進100萬,執行兩次表示推進200萬,10015 level 1表示推進500萬,如下表示推進了700萬,推進多次後alter database open還是報ORA-01113的話就沒轍了
SQL> shutdown abort;
SQL> startup mount pfile='/..../init.ora';
SQL> ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 1';
Session altered.
SQL> ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 1';
Session altered.
SQL> ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 5';
Session altered.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u01/app/oracle/oradata/DB/system01.dbf'
注意:利用上面這種方法開啟的資料庫,很有可能存在不一致的地方,所以用exp/imp的方法將資料匯入到新庫中。
online redo inactive\unused檔案丟失,可以恢復,只要啟動到mount狀態,alter database clear logfile即可
比如手工刪除了active狀態的group 1的所有日誌檔案,啟動的時候報錯ORA-00313: open failed for members of log group 1 of thread 1
SQL> startup mount;
SQL> alter database clear logfile group 1;
SQL> alter database open;
online redo active檔案丟失,無法恢復。
SQL> select GROUP#,THREAD#,SEQUENCE#,STATUS from v$log;
GROUP# THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
1 1 10 CURRENT
3 1 9 ACTIVE
2 1 8 ACTIVE
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> alter database clear logfile group 2;
alter database clear logfile group 2
*
ERROR at line 1:
ORA-01624: log 2 needed for crash recovery of instance orcl (thread 1)
ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/orcl/redo02.log'
online redo current檔案丟失,基本上是無法恢復了
沒有任何備份的環境下online redo current檔案丟失(歸不歸檔都一樣),一般恢復不過來。但仍有如下大概的恢復方法,無法保證一定能成功,運氣好的話可能成功。
遇到這樣的問題,一般是如下場景
SQL>startup mount;
RMAN> restore database;
RMAN> recover database;
RMAN>alter database open resetlogs;
後會有如下提示
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/app/oracle/oradata/DB/system01.dbf'
這是因為當前的redo log寫入不完整導致庫無法開啟,我們需要使用強制open資料庫的方式,使其跳過資料庫對redo和undo 表空間的檢驗。
恢復方法
1.備份所有資料檔案(強制開庫後所有檔案都會有一次寫入行為,如果強制開庫失敗,可能會導致最後一招DUL資料抽取工具都無法使用)
2.擷取出報錯ORA-01110中資料檔案的UNDO資訊,如上為system01.dbf
strings system01.dbf | grep _SYSSMU | cut -d $ -f 1 | sort -u
3.根據上面顯示的UNDO資訊,在pfile中新增引數_CORRUPTED_ROLLBACK_SEGMENTS,如下_SYSSMU1$表示以1開頭的所有UNDO資訊,一般如下配置就包括了所有的UNDO資訊,1開頭到9開頭的所有UNDO
_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$)
4.pfile中繼續新增如下引數
UNDO_MANAGEMENT=MANUAL
_ALLOW_RESETLOGS_CORRUPTION = TRUE
5.啟動資料到mount狀態
SQL>startup mount pfile='/..../init.ora'
SQL>show parameter corrupt;
SQL>show parameter undo
6.Recover and open the database:
SQL>RECOVER DATABASE UNTIL CANCEL;
==>輸入CANCEL
SQL>ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE OPEN RESETLOGS
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
ORA-00600: internal error code, arguments: [2662], [2380], [2470549886],
[2380], [2470550245], [12583040], [], [], [], [], [], []
ORA-00600: internal error code, arguments: [2662], [2380], [2470549885],
[2380], [2470550245], [12583040], [], [], [], [], [], []
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00600: internal error code, arguments: [2662], [2380], [2470549881],
[2380], [2470550245], [12583040], [], [], [], [], [], []
Process ID: 4066
Session ID: 3753 Serial number: 3
7.如果上面報錯ora-00600 [2662],則需要推進SCN,執行一次10015 level 1表示推進100萬,執行兩次表示推進200萬,10015 level 1表示推進500萬,如下表示推進了700萬,推進多次後alter database open還是報ORA-01113的話就沒轍了
SQL> shutdown abort;
SQL> startup mount pfile='/..../init.ora';
SQL> ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 1';
Session altered.
SQL> ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 1';
Session altered.
SQL> ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 5';
Session altered.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u01/app/oracle/oradata/DB/system01.dbf'
注意:利用上面這種方法開啟的資料庫,很有可能存在不一致的地方,所以用exp/imp的方法將資料匯入到新庫中。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2142751/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- undo表空間檔案丟失恢復(2)--無備份有redo的情況下恢復
- 沒有自動備份的情況下控制檔案全部丟失的恢復
- undo表空間檔案丟失恢復(3)--無備份無redo的情況下恢復
- 恢復之利用備份在所有控制檔案丟失情況下恢復(四)
- 恢復之利用備份在所有控制檔案丟失情況下恢復(三)
- 恢復之利用備份在所有控制檔案丟失情況下恢復(二)
- 恢復之利用備份在所有控制檔案丟失情況下恢復(一)
- undo表空間檔案丟失恢復(4)--無備份無recover的情況下恢復
- 【恢復】Redo日誌檔案丟失的恢復
- rman恢復--歸檔模式有備份,丟失資料檔案的恢復模式
- 沒備份,歸檔日誌存在,丟失資料檔案的恢復
- Oracle備份與恢復【丟失資料檔案的恢復】Oracle
- REDO檔案丟失或者損壞的恢復
- 歸檔模式有備份丟失資料檔案後恢復模式
- undo表空間檔案丟失恢復(1)--有備份
- 備份恢復之資料檔案丟失
- 只有rman備份集,控制檔案丟失的恢復
- rman恢復--歸檔模式無備份,丟失資料檔案的恢復模式
- 資料庫在沒有備份的情況下的資料檔案損壞的恢復資料庫
- 【備份恢復】恢復 丟失已歸檔重做日誌檔案
- 【備份恢復】所有控制檔案丟失後 利用trace中的控制檔案備份執行恢復
- 非歸檔無備份下控制檔案丟失的恢復
- 【備份恢復】 丟失一個控制檔案 之恢復操作
- RMAN資料庫恢復 之歸檔模式有(無)備份-丟失資料檔案的恢復資料庫模式
- 沒有備份的資料檔案恢復(五)
- 恢復之丟失全部控制檔案以及備份中的控制檔案
- 備份恢復實驗(1)丟失部分控制檔案
- 歸檔模式,恢復沒有備份的資料檔案模式
- 備份恢復之redo日誌組member成員丟失
- Oracle備份與恢復【丟失控制檔案的恢復】Oracle
- 【DATAGUARD】物理dg在主庫丟失歸檔檔案的情況下的恢復(七)
- 歸檔模式無備份丟失資料檔案後恢復模式
- 有整庫備份的情況rman恢復全庫
- 【備份恢復】非歸檔模式下丟失任意資料檔案 恢復操作模式
- Oracle主庫歸檔丟失,備庫日誌有gap,在不重建備庫的情況下,恢復備庫Oracle
- 備份與恢復--資料檔案損壞或丟失
- 恢復丟失的控制檔案
- 【備份恢復】歸檔模式下丟失系統關鍵資料檔案 利用RMAN備份恢復模式