1. 程式人生 > >一次ORA-600處理

一次ORA-600處理

ORACLE ORA-600 UNDO

ORA-00600:internal error code, arguments: [4194], [43], [46], [], [], [], [], []
出現這種情況,大多數是因為異常宕機,在啟動的時候報的錯誤。DB 不能啟動。

方法一:使用system segment

(1)用spfile 創建pfile,然後修改參數:
#.undo_tablespace=‘UNDOTBS1‘
#
.undo_management=‘AUTO‘
#.undo_tablespace
#
.undo_retention
undo_management=‘MANUAL‘
rollback_segments=‘SYSTEM‘

(2)用修改之後的pfile,重啟DB

SQL> STARTUP pfile=‘F:/initorcl.ora‘ ;

(3)刪除原來的表空間,創建新的UNDO 表空間
SQL> drop tablespace undotbs;
SQL> create undo tablespace undotbs1 datafile ‘/u01/oradata/undotbs1.dbf‘ size 10M;

(4)關閉數據庫,修改pfile參數,然後用新的pfile創建spfile,在正常啟動數據庫。
.undo_tablespace=‘UNDOTBS1‘
.undo_management=‘AUTO‘
#undo_management=‘MANUAL‘

#rollback_segments=‘SYSTEM‘

方法二:跳過損壞的segment

在方法一裏面,我們使用了system segment。 通過第一部分我們了解到,undo segment 有多個,我們可以通過alert log 來查看正在使用的是哪些segment,這些段有可能損壞了。 我們只需要把這些損壞的segment 跳過,先正常啟動DB,在創建新的UNDO 表空間,在切換一下。

(1)修改pfile,添加參數:
*._corrupted_rollback_segments=‘_SYSSMU11$‘,‘_SYSSMU12$‘,‘_SYSSMU13$‘

這些字段的值,我們通過alert log 查看。 也可以通過如下命令查看:

#strings system01.dbf | grep _SYSSMU | cut -d $ -f 1 | sort -u

(2)用修改之後的pfile啟動DB
因為跳過了哪些損壞的segment,所以DB 可以正常啟動。

(3)創建新的UNDO 表空間,並切換過來

SQL> create undo tablespace undotbs1 datafile ‘/u01/oradata/undotbs1.dbf‘ size 10M;
SQL> alter system set undo_tablespace=undotbs1;
SQL> drop tablespace undotbs;

(4)修改pfile,創建spfile,並正常啟動
刪除:
*._corrupted_rollback_segments=‘_SYSSMU11$‘,‘_SYSSMU12$‘,‘_SYSSMU13$‘

以上就是UNDO 出現故障的2種處理方法。

一次ORA-600處理