前線上日誌檔案損壞與ora-600 [4000]處理
前線上日誌檔案損壞與ora-600 [4000]處理[@more@]這次又是一臺機器上面有兩個例項A和B。又是由於非當前的線上日誌檔案的狀態是處於closed狀態的(裸裝置),於是dba將A節點的非當前線上日誌檔案填加到了B節點上面去了,於是在A節點日誌發生切換時,導致了當前線上日誌檔案損壞。
一般情況下當前線上日誌檔案損壞也是還好處理的,但是這次卻是較為複雜。。。。
系統環境:aix p550,oracle 9206
首先檢查v$datafile_header,發現checkpoint_change#都是一致的。
於是按著一般的當前線上日誌檔案損壞步驟處理:
增加下列引數至Oracle啟動檔案:
_allow_resetlogs_corruption=TRUE
_corrupted_rollback_segments=(list of all your rollback segments)
註釋掉啟動檔案中的rollback_segments引數或undo_tablespaces引數
startup mount
recover database until cancel
alter database open resetlogs;
一般情況下,open resetlogs後最容易出現的600號錯誤為ora-600 [2662]和ora-600 [2256]。這兩個錯誤也相對來說好處理一些,只需要採用10015事件adjust scn號即可。
但是這次我卻是碰到了ora-600 [4000]號錯誤。
Errors in file /home/oracle/app/oracle/admin/test/udump/test_ora_2838638.trc:
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00600: internal error code, arguments: [4000], [46], [], [], [], [], [], []
Mon Aug 14 15:05:31 2006
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 2838638
metalink上對該錯誤的解釋是:
DESCRIPTION:
This has the potential to be a very serious error.
It means that Oracle has tried to find an undo segment number in the
dictionary cache and failed.
ARGUMENTS:
Arg [a] Undo segment number
FUNCTIONALITY:
KERNEL TRANSACTION UNDO
IMPACT:
INSTANCE FAILURE - Instance will not restart
STATEMENT FAILURE
由於一開始_corrupted_rollback_segments裡面只是列到_syssmu20$,於是將它列到_syssmu60$。重試後還是報這個錯。
增加10513事件,禁止smon程式回滾,結果還是一樣。
在600號的Trace檔案中有:
ORA-00600: internal error code, arguments: [4000], [46], [], [], [], [], [], []
Current SQL statement for this session:
select ctime, mtime, stime from obj$ where obj# = :1
於是我懷疑會不會是undo$基表中沒有46號回滾段的資訊?
採用bbed檢查undo$表格,發現裡面是有這個回滾段的資訊。
於是我想這個錯誤是出現在訪問obj$基表上面,也就是說該表格的scn號與系統當前的scn號是不一致的。於是我想償試修改該塊的scn號。依然採用bbed,償試修改該塊的scn號。修改後,結果還是一樣的。
於是我想應該是obj$基表上還有一個未提交的事務。於是繼續檢視trace檔案,發現如下資訊:
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x002e.025.00005b2c 0x00800f78.080c.01 --U- 1 fsc 0x0000.c5b527cf
data_block_dump,data header at 0x700000001f6e044
===============
tsiz: 0x1fb8
hsiz: 0xea
pbl: 0x700000001f6e044
bdba: 0x0040007a
76543210
flag=--------
很明顯,是有一個未提交的事務,於是我就償試用bbed修改該事務的狀態,將該事務改成提交狀態。
首先找到itl資訊:find /x 00005b2c,找到flag狀態,現在其狀態是20,也就是未提交,將之修改為80(提交狀態),並修改checkval。
之後去掉所有隱含引數,正常啟動資料庫,發現後臺報出了ora-600[2662]錯誤。哈哈,事情至此就好辦了,採用10015 adjust scn號,正常啟動資料庫:
Mon Aug 14 15:47:23 2006
Completed: ALTER DATABASE OPEN
Mon Aug 14 15:47:23 2006
Fatal internal error happened while SMON was doing active transaction recovery.
Mon Aug 14 15:47:23 2006
Errors in file /home/oracle/app/oracle/admin/test/bdump/test_smon_2293872.trc:
ORA-00600: internal error code, arguments: [ktpridestroy2], [], [], [], [], [], [], []
SMON: terminating instance due to error 600
Instance terminated by SMON, pid = 2293872
從這塊日誌可以看出資料庫正常啟動後,馬上因為smon回滾又導致了例項宕下來。
增加10513事件,啟動資料庫,一切正常。
想drop tablespce undotbs1,但是報出59號回滾段還有active事務無法刪除。
於是增加_corrupted_rollback_segments引數,將資料庫啟來,新建一個回滾表空間,將原來的回滾表空間重建後,一切正常。
一般情況下當前線上日誌檔案損壞也是還好處理的,但是這次卻是較為複雜。。。。
系統環境:aix p550,oracle 9206
首先檢查v$datafile_header,發現checkpoint_change#都是一致的。
於是按著一般的當前線上日誌檔案損壞步驟處理:
增加下列引數至Oracle啟動檔案:
_allow_resetlogs_corruption=TRUE
_corrupted_rollback_segments=(list of all your rollback segments)
註釋掉啟動檔案中的rollback_segments引數或undo_tablespaces引數
startup mount
recover database until cancel
alter database open resetlogs;
一般情況下,open resetlogs後最容易出現的600號錯誤為ora-600 [2662]和ora-600 [2256]。這兩個錯誤也相對來說好處理一些,只需要採用10015事件adjust scn號即可。
但是這次我卻是碰到了ora-600 [4000]號錯誤。
Errors in file /home/oracle/app/oracle/admin/test/udump/test_ora_2838638.trc:
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00600: internal error code, arguments: [4000], [46], [], [], [], [], [], []
Mon Aug 14 15:05:31 2006
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 2838638
metalink上對該錯誤的解釋是:
DESCRIPTION:
This has the potential to be a very serious error.
It means that Oracle has tried to find an undo segment number in the
dictionary cache and failed.
ARGUMENTS:
Arg [a] Undo segment number
FUNCTIONALITY:
KERNEL TRANSACTION UNDO
IMPACT:
INSTANCE FAILURE - Instance will not restart
STATEMENT FAILURE
由於一開始_corrupted_rollback_segments裡面只是列到_syssmu20$,於是將它列到_syssmu60$。重試後還是報這個錯。
增加10513事件,禁止smon程式回滾,結果還是一樣。
在600號的Trace檔案中有:
ORA-00600: internal error code, arguments: [4000], [46], [], [], [], [], [], []
Current SQL statement for this session:
select ctime, mtime, stime from obj$ where obj# = :1
於是我懷疑會不會是undo$基表中沒有46號回滾段的資訊?
採用bbed檢查undo$表格,發現裡面是有這個回滾段的資訊。
於是我想這個錯誤是出現在訪問obj$基表上面,也就是說該表格的scn號與系統當前的scn號是不一致的。於是我想償試修改該塊的scn號。依然採用bbed,償試修改該塊的scn號。修改後,結果還是一樣的。
於是我想應該是obj$基表上還有一個未提交的事務。於是繼續檢視trace檔案,發現如下資訊:
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x002e.025.00005b2c 0x00800f78.080c.01 --U- 1 fsc 0x0000.c5b527cf
data_block_dump,data header at 0x700000001f6e044
===============
tsiz: 0x1fb8
hsiz: 0xea
pbl: 0x700000001f6e044
bdba: 0x0040007a
76543210
flag=--------
很明顯,是有一個未提交的事務,於是我就償試用bbed修改該事務的狀態,將該事務改成提交狀態。
首先找到itl資訊:find /x 00005b2c,找到flag狀態,現在其狀態是20,也就是未提交,將之修改為80(提交狀態),並修改checkval。
之後去掉所有隱含引數,正常啟動資料庫,發現後臺報出了ora-600[2662]錯誤。哈哈,事情至此就好辦了,採用10015 adjust scn號,正常啟動資料庫:
Mon Aug 14 15:47:23 2006
Completed: ALTER DATABASE OPEN
Mon Aug 14 15:47:23 2006
Fatal internal error happened while SMON was doing active transaction recovery.
Mon Aug 14 15:47:23 2006
Errors in file /home/oracle/app/oracle/admin/test/bdump/test_smon_2293872.trc:
ORA-00600: internal error code, arguments: [ktpridestroy2], [], [], [], [], [], [], []
SMON: terminating instance due to error 600
Instance terminated by SMON, pid = 2293872
從這塊日誌可以看出資料庫正常啟動後,馬上因為smon回滾又導致了例項宕下來。
增加10513事件,啟動資料庫,一切正常。
想drop tablespce undotbs1,但是報出59號回滾段還有active事務無法刪除。
於是增加_corrupted_rollback_segments引數,將資料庫啟來,新建一個回滾表空間,將原來的回滾表空間重建後,一切正常。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-899042/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 線上日誌檔案損壞恢復方法
- 線上日誌損壞
- 當前聯機日誌檔案損壞
- SQL Server 2005日誌檔案損壞的處理方法SQLServer
- Oracle聯機日誌檔案丟失或損壞的處理方法Oracle
- ORACLE聯機日誌檔案丟失或損壞的處理方法(轉)Oracle
- Oracle聯機日誌檔案丟失或損壞的處理方法 (轉)Oracle
- sysaux表空間檔案損壞的處理(zt)UX
- 重做日誌檔案損壞測試
- 處理塊損壞
- 當前日誌檔案壞了的處理辦法
- 聯機日誌檔案損壞問題
- ORA-600 [12700]故障處理一則(線上重建損壞的索引)索引
- Oracle 無備份情況下undo檔案損壞處理Oracle
- coreldraw檔案丟失(損壞)的恢復處理辦法
- ORA-600[4000]/[4097]錯誤的處理
- undo 檔案損壞
- 段頭損壞的處理
- 陣列櫃故障造成控制檔案損壞,資料檔案損壞陣列
- 非歸檔模式下線上日誌檔案破壞後例項恢復案例模式
- [20170303]dg環境下線上日誌損壞8.txt
- 第7章 處理塊損壞
- 一次日誌檔案損壞的恢復
- REDO日誌損壞,非歸檔模式資料檔案恢復模式
- oracle10g rac 表決盤損壞、ocr損壞處理Oracle
- ora-600 [4000]的又一次處理[轉帖]
- [20170307]dg環境下線上日誌損壞12.txt
- [20170309]dg環境下線上日誌損壞13.txt
- [20170310]dg環境下線上日誌損壞14.txt
- [20170301]dg環境下線上日誌損壞5.txt
- 一個控制檔案損壞
- RMAN出現檔案損壞ORA-19566: exceeded limit of 0 corrupt blocks 處理MITBloC
- RAC磁碟頭損壞問題處理
- UNDO表空間損壞的處理
- inactive狀態日誌組檔案損壞的恢復
- redo日誌損壞
- 聯機日誌檔案損壞後的恢復方法[轉帖]
- Oracle重做日誌檔案損壞或丟失後的恢復Oracle