ORACLE-00600 4194 斷電undo損壞處理過程

paulyibinyi發表於2009-03-18

       接上面一篇文章,資料庫斷電後,啟動到mount狀態時報ORA-00600: internal error code, arguments: [kcratr1_lastbwr]

錯誤,然後按 startup mount;  recover database; alter database open; 開啟後,

但查詢相關檢視時報ora-03113錯誤, desc 某個表名時,也報強制斷開連線錯誤

然後就查alert.log日誌檔案,裡面內容如下:

Tue Mar 17 17:10:40 2009
Doing block recovery for file 2 block 2610
Block recovery from logseq 105001, block 78 to scn 7719204736317
Tue Mar 17 17:10:40 2009
Recovery of Online Redo Log: Thread 1 Group 3 Seq 105001 Reading mem 0
  Mem# 0 errs 0: D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG
Block recovery completed at rba 105001.86.16, scn 1797.1148505406
Doing block recovery for file 2 block 73
Block recovery from logseq 105001, block 78 to scn 7719204736305
Tue Mar 17 17:10:40 2009
Recovery of Online Redo Log: Thread 1 Group 3 Seq 105001 Reading mem 0
  Mem# 0 errs 0: D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG
Block recovery completed at rba 105001.78.16, scn 1797.1148505394
Tue Mar 17 17:10:41 2009
Errors in file d:\oracle\product\10.2.0\admin\orcl\bdump\orcl_smon_1856.trc:
ORA-01595: error freeing extent (3) of rollback segment (5))
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [4194], [10], [10], [], [], [], [], []

不斷的報ORA-00600 4194錯誤,第一個想到的就是 undo已經損壞

需要重建undo,用隱含引數開啟了,如果有備份的話,就從備份中恢復了,這裡介紹下用隱含引數打

開的方法

首先確定有多少undo回滾段,可以從alert.log日誌中查詢,如果有多個回滾段,就全部列上去

關閉資料庫,修改init.ora檔案

修改init.ora引數檔案,使用Oracle隱含引數_corrupted_rollback_segments將回滾段標記為損壞,此時啟動資料庫,Oracle會跳過對於這些回滾段的相關操作,強制啟動資料庫。

._corrupted_rollback_segments='_SYSSMU1$','_SYSSMU2$','_SYSSMU3$','_SYSSMU4$','_SYSSMU5$'

用修改的init.ora檔案啟動

startup pfile=init.ora

這時能正常啟動

此時可以重新建立新的UNDO表空間,刪除出現問題的表空間,修改引數檔案,由引數檔案生成新的spfile,重新啟動資料庫: 

SQL> create undo tablespace undotbs1
  2  datafile '/opt/oracle/oradata/conner/undotbs1.dbf' size 10M;
Tablespace created.
SQL> alter system set undo_tablespace=undotbs1;
System altered.

SQL> drop tablespace undotbs2;
Tablespace dropped. 

修改引數檔案,變更undo表空間,並取消_corrupted_rollback_segments設定: 

*.undo_tablespace='UNDOTBS1' 

由引數檔案建立spfile檔案。 

SQL> create spfile from pfile;
File created.

此時資料庫恢復正常,通常建議立即全庫exp,然後重新建庫,再imp恢復資料庫。

最近經歷了一次,ups供電不足導致資料庫異常關閉而損壞undo的事件。

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

相關文章