ORA-00600[2662]問題模擬及解決方法

參照eygle的相關技術blog,測試下_disable_logging將對數據庫產生的影響,由於是隱含參數,所以我們通過如下方法獲取對這個參數的描述:
SQL> select ksppinm,ksppdesc from x$ksppi where ksppinm like '%logging';

KSPPINM              KSPPDESC
------------------------------------
_disable_logging     Disable logging

將其改爲ture,也就是啓用了不記錄日誌的方式:
SQL> alter system set "_disable_logging"=true scope=both;

System altered.

創建一個,並模擬事務運行,生成大量的redo,
SQL> create table mm tablespace marvener as select * from dba_objects;

Table created.

SQL> insert into mm  select * from dba_objects;

45167 rows created.

SQL> /

45167 rows created.
這個時候突然掉電了,也就是shutdown abort關閉數據庫:
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 1610612736 bytes
Fixed Size                  2084296 bytes
Variable Size             385876536 bytes
Database Buffers         1207959552 bytes
Redo Buffers               14692352 bytes
Database mounted.
ORA-00354: corrupt redo log block header
ORA-00353: log corruption near block 81435 change 856029 time 01/30/2012
15:50:39
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/marven/redo01.log'

如上。可以發現數據庫無法正常打開,並提示重做日誌塊頭損壞,在告警中可見大量的如下告警信息:
試圖通過Resetlogs方式打開數據庫:
alter system set "_allow_resetlogs_corruption"=true scope=spfile;
shutdown abort
startup
數據庫仍然會顯然如下告警,並強制關閉實例:

SMON: enabling cache recovery
Mon Jan 30 16:15:41 2012
Errors in file /u01/app/oracle/admin/marven/udump/marven_ora_2900.trc:
ORA-00600: internal error code, arguments: [2662], [0], [855728], [0], [855937], [8388649], [], []
Mon Jan 30 16:15:42 2012
Errors in file /u01/app/oracle/admin/marven/udump/marven_ora_2900.trc:
ORA-00600: internal error code, arguments: [2662], [0], [855728], [0], [855937], [8388649], [], []
Mon Jan 30 16:15:42 2012
Error 600 happened during db open, shutting down database
USER: terminating instance due to error 600
Instance terminated by USER, pid = 2900
ORA-1092 signalled during: alter database open resetlogs...
Mon Jan 30 16:16:34 2012

此時我們可以通過Oracle的內部事件來調整SCN:
 
增進SCN有兩種常用方法:
1.通過immediate trace name方式(在數據庫Open狀態下)
alter session set events 'IMMEDIATE trace name ADJUST_SCN level x';
2.通過10015事件(在數據庫無法打開,mount狀態下)
alter session set events '10015 trace name adjust_scn level x';
注:level 1爲增進SCN 10億 (1 billion) (1024*1024*1024),通常Level 1已經足夠。也可以根據實際情況適當調整。
本次由於數據庫並未打開,而處於mount狀態,所以只能通過第二種方式:

alter session set events '10015 trace name adjust_scn level 10';

SQL> alter database open;

Database altered.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章