【故障恢復】【驚魂】ORACLE聯機日誌檔案無故全部消失
資料庫環境簡介:
作業系統: Windows XP
資料庫版本: Oracle 10.2.0.1
歸檔模式: 非歸檔
備份策略: 沒有任何的備份策略,無備份可用
用途: 測試資料庫
【故障描述】
今天在啟動本機測試用資料庫時驚現資料庫無法啟動,提示如下:
C:\>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jun 16 18:25:43 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 75498876 bytes
Database Buffers 83886080 bytes
Redo Buffers 7139328 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\SEC\REDO01.LOG'
SQL>
如上提示,系統找不到聯機日誌檔案,一身冷汗,就算是測試資料庫也不能就這樣“掛”了啊!
順著錯誤提示的目錄,進入到日誌檔案所在的目錄,哇塞,全部的日誌檔案都不見了!(現在想想,可能是因為這個測試資料庫我好久沒有問津了,也許在某一次的C盤檔案批次整理的過程中連帶這些重要的檔案一同“整理”掉了),心中不免有些緊張,轉念一想幸好是測試資料庫,釋然一下下,於是……我決定————恢復之,現把整個的恢復過程記錄如下,希望螢幕前的您不要再犯我這樣的錯誤了,作為一位DBA是絕對不應該允許自己犯這樣的錯誤,即使是純純的測試資料庫。
【故障分析】
因為是全部的日誌檔案都被刪除了,所以既包含當前聯機日誌,也包含非當前聯機日誌,我恢復的順序是:先透過Clear的方式恢復非當前聯機日誌,再透過設定隱含引數_allow_resetlogs_corruption=TRUE的方式恢復當前聯機日誌(使用這種極端的恢復方式是我不想看到的,沒有辦法,誰叫我沒有備份呢,找了半天連冷備都沒做過。如果您有備份,記住要優先考慮使用備份進行恢復)。
【故障處理】
1.透過v$log檢視確定哪些是當前聯機日誌和非當前聯機日誌
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
------- ------- ---------- -------- ------- --- -------- ------------- ---------
1 1 2 52428800 1 NO CURRENT 272945 16-JUN-09
3 1 1 52428800 1 NO INACTIVE 252940 16-JUN-09
2 1 0 52428800 1 YES UNUSED 0
確定如下:
group 1是當前聯機日誌
group 2 和group 3是非當前聯機日誌
2.透過Clear方式恢復非當前聯機日誌group 2 和group 3
SQL> alter database clear logfile group 2;
Database altered.
SQL> alter database clear logfile group 3;
Database altered.
此時檢視日誌檔案所在的目錄會依次恢復出兩個50M的日誌檔案REDO02.LOG和REDO03.LOG
(註釋:如果是該日誌組還沒有歸檔,則需要用如下的SQL命令進行操作
alter database clear unarchived logfile group 2;)
3.恢復當前聯機日誌 group 1,先演示確認一下透過clear的方式無法恢復當前聯機日誌
SQL> alter database clear logfile group 1;
alter database clear logfile group 1
*
ERROR at line 1:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\SEC\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) The system cannot find the file specified.
4.設定隱含引數_allow_resetlogs_corruption為“TRUE”
生成pfile
SQL> create pfile from spfile;
File created.
停掉資料庫
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
在生成的pfile(對應檔案是C:\oracle\product\10.2.0\db_1\database\INITsec.ORA)最後一行新增如下內容,儲存退出
_allow_resetlogs_corruption=TRUE
5.使用pfile啟動資料庫到mount狀態
SQL> startup mount pfile=C:\oracle\product\10.2.0\db_1\database\INITsec.ORA;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 75498876 bytes
Database Buffers 83886080 bytes
Redo Buffers 7139328 bytes
Database mounted.
6.利用until cancel進行恢復
SQL> recover database until cancel;
ORA-00279: change 274548 generated at 06/16/2009 19:15:54 needed for thread 1
ORA-00289: suggestion : C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\SEC\ARCHIVELOG\2009_06_16\O1_MF_1_1_%U_.ARC
ORA-00280: change 274548 for thread 1 is in sequence #1
Specify log: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\SEC\SYSTEM01.DBF'
ORA-01112: media recovery not started
7.resetlogs方式開啟資料庫
SQL> alter database open resetlogs;
Database altered.
這時在日誌檔案所在的目錄中就可以看到被恢復出來的當前聯機日誌REDO01.LOG
8.到此,恢復過程完成,後續任務一:進行全庫的EXP備份
C:\>exp system/system file=exp_full_backup.dmf log=exp_full_backup.log full=y
9.後續任務二:取消隱含引數_all_resetlogs_corrupt
10.後續任務三:重建資料庫
11.後續任務四:使用IMP將剛剛備份的檔案匯入到資料庫中
12.檢查一下是否有無效的物件,處理之
13.搞定!
【總結】
針對這個測試庫,如果我有備份,恢復過程將大大簡化,也許只需要此恢復過程的1/10時間。
所以,
請每一位親愛的DBA記住,為了縮短故障時間,最有效的方法就是——————備份!制定有效的備份策略,即便這個資料庫僅僅用於測試和娛樂。
Good lucky.
-- The End --
作業系統: Windows XP
資料庫版本: Oracle 10.2.0.1
歸檔模式: 非歸檔
備份策略: 沒有任何的備份策略,無備份可用
用途: 測試資料庫
【故障描述】
今天在啟動本機測試用資料庫時驚現資料庫無法啟動,提示如下:
C:\>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jun 16 18:25:43 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 75498876 bytes
Database Buffers 83886080 bytes
Redo Buffers 7139328 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\SEC\REDO01.LOG'
SQL>
如上提示,系統找不到聯機日誌檔案,一身冷汗,就算是測試資料庫也不能就這樣“掛”了啊!
順著錯誤提示的目錄,進入到日誌檔案所在的目錄,哇塞,全部的日誌檔案都不見了!(現在想想,可能是因為這個測試資料庫我好久沒有問津了,也許在某一次的C盤檔案批次整理的過程中連帶這些重要的檔案一同“整理”掉了),心中不免有些緊張,轉念一想幸好是測試資料庫,釋然一下下,於是……我決定————恢復之,現把整個的恢復過程記錄如下,希望螢幕前的您不要再犯我這樣的錯誤了,作為一位DBA是絕對不應該允許自己犯這樣的錯誤,即使是純純的測試資料庫。
【故障分析】
因為是全部的日誌檔案都被刪除了,所以既包含當前聯機日誌,也包含非當前聯機日誌,我恢復的順序是:先透過Clear的方式恢復非當前聯機日誌,再透過設定隱含引數_allow_resetlogs_corruption=TRUE的方式恢復當前聯機日誌(使用這種極端的恢復方式是我不想看到的,沒有辦法,誰叫我沒有備份呢,找了半天連冷備都沒做過。如果您有備份,記住要優先考慮使用備份進行恢復)。
【故障處理】
1.透過v$log檢視確定哪些是當前聯機日誌和非當前聯機日誌
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
------- ------- ---------- -------- ------- --- -------- ------------- ---------
1 1 2 52428800 1 NO CURRENT 272945 16-JUN-09
3 1 1 52428800 1 NO INACTIVE 252940 16-JUN-09
2 1 0 52428800 1 YES UNUSED 0
確定如下:
group 1是當前聯機日誌
group 2 和group 3是非當前聯機日誌
2.透過Clear方式恢復非當前聯機日誌group 2 和group 3
SQL> alter database clear logfile group 2;
Database altered.
SQL> alter database clear logfile group 3;
Database altered.
此時檢視日誌檔案所在的目錄會依次恢復出兩個50M的日誌檔案REDO02.LOG和REDO03.LOG
(註釋:如果是該日誌組還沒有歸檔,則需要用如下的SQL命令進行操作
alter database clear unarchived logfile group 2;)
3.恢復當前聯機日誌 group 1,先演示確認一下透過clear的方式無法恢復當前聯機日誌
SQL> alter database clear logfile group 1;
alter database clear logfile group 1
*
ERROR at line 1:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\SEC\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) The system cannot find the file specified.
4.設定隱含引數_allow_resetlogs_corruption為“TRUE”
生成pfile
SQL> create pfile from spfile;
File created.
停掉資料庫
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
在生成的pfile(對應檔案是C:\oracle\product\10.2.0\db_1\database\INITsec.ORA)最後一行新增如下內容,儲存退出
_allow_resetlogs_corruption=TRUE
5.使用pfile啟動資料庫到mount狀態
SQL> startup mount pfile=C:\oracle\product\10.2.0\db_1\database\INITsec.ORA;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 75498876 bytes
Database Buffers 83886080 bytes
Redo Buffers 7139328 bytes
Database mounted.
6.利用until cancel進行恢復
SQL> recover database until cancel;
ORA-00279: change 274548 generated at 06/16/2009 19:15:54 needed for thread 1
ORA-00289: suggestion : C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\SEC\ARCHIVELOG\2009_06_16\O1_MF_1_1_%U_.ARC
ORA-00280: change 274548 for thread 1 is in sequence #1
Specify log: {
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\SEC\SYSTEM01.DBF'
ORA-01112: media recovery not started
7.resetlogs方式開啟資料庫
SQL> alter database open resetlogs;
Database altered.
這時在日誌檔案所在的目錄中就可以看到被恢復出來的當前聯機日誌REDO01.LOG
8.到此,恢復過程完成,後續任務一:進行全庫的EXP備份
C:\>exp system/system file=exp_full_backup.dmf log=exp_full_backup.log full=y
9.後續任務二:取消隱含引數_all_resetlogs_corrupt
10.後續任務三:重建資料庫
11.後續任務四:使用IMP將剛剛備份的檔案匯入到資料庫中
12.檢查一下是否有無效的物件,處理之
13.搞定!
【總結】
針對這個測試庫,如果我有備份,恢復過程將大大簡化,也許只需要此恢復過程的1/10時間。
所以,
請每一位親愛的DBA記住,為了縮短故障時間,最有效的方法就是——————備份!制定有效的備份策略,即便這個資料庫僅僅用於測試和娛樂。
Good lucky.
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-606533/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 恢復案例:無歸檔,丟失全部控制檔案、日誌檔案恢復案例
- 聯機重做日誌檔案的恢復
- RMAN恢復案例:無恢復目錄,丟失全部資料檔案、控制檔案、日誌檔案恢復
- 丟失聯機重做日誌檔案的恢復
- Oracle恢復例項之二:Inactive聯機日誌檔案丟失Oracle
- Oracle恢復例項之一:資料檔案、控制檔案、聯機日誌丟失Oracle
- oracle 聯機重做日誌檔案Oracle
- Oracle恢復例項之三:active或current聯機日誌檔案丟失Oracle
- 【備份與恢復】恢復受損的複用聯機重做日誌檔案
- 損壞聯機日誌 恢復
- 聯機日誌檔案損壞後的恢復方法[轉帖]
- oracle丟失日誌檔案的恢復( 轉)Oracle
- Oracle使用備份檔案集恢復歸檔日誌Oracle
- rman恢復--丟失聯機重做日誌的恢復
- 當前聯機日誌和其他聯機日誌恢復的區別
- Oracle Redo(重做日誌) 模擬故障和恢復Oracle Redo
- 恢復案例:無歸檔,掉電,控制檔案全部丟失恢復
- 【恢復】Redo日誌檔案丟失的恢復
- 聯機重做日誌丟失的恢復
- 聯機日誌損壞恢復實驗
- 損壞聯機日誌的恢復方法
- 無歸檔日誌恢復rman資料
- 【備份與恢復】重建受損的聯機重做日誌檔案成員
- Oracle中的聯機日誌檔案發生不同程度損壞的恢Oracle
- 恢復歸檔日誌檔案的常用方法
- oracle dg 歸檔日誌恢復情況Oracle
- oracle 恢復重做日誌Oracle
- 11.2.0.3.2 RMAN無法恢復歸檔日誌
- 【備份恢復】恢復 丟失已歸檔重做日誌檔案
- 控制檔案全部丟失,無備份,通過異機trace恢復
- oracle聯機日誌檔案REDO LOGFILE簡述Oracle
- 丟失所有重做日誌檔案的恢復例子丟失所有重做日誌檔案的恢復例子如下:
- 控制檔案全部丟失恢復
- 非歸檔丟失日誌檔案的恢復
- 【備份恢復】恢復inactive狀態的日誌檔案
- [ORACLE] 系統故障資料庫恢復--資料檔案無損壞Oracle資料庫
- Oracle 聯機重做日誌檔案(ONLINE LOG FILE)Oracle
- oracle丟失inactive日誌檔案的恢復操作過程Oracle