情况是这样的,晚上接到一个电话,客户数据库无法启动,启动的时候报ORA-00600:[kcratr_nab_less_than_odr]错误.具体日志如下:
Started redo scan Completed redo scan read 248114 KB redo, 428179 data blocks need recovery Errors in file /oracle/app/oracle/diag/rdbms/db/db2/trace/db2_ora_14921.trc (incident=136280): ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [9592], [59130], [59523],[], [], [], [], [], [], [] Incident details in: /oracle/app/oracle/diag/rdbms/db/db2/incident/incdir_136280/db2_ora_14921.trc Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details. Abort recovery for domain 0 Aborting crash recovery due to error 600 Errors in file /oracle/app/oracle/diag/rdbms/db/db2/trace/db2_ora_14921.trc: ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [9592], [59130], [59523], [], [], [], [], [], [], [] Abort recovery for domain 0 Errors in file /oracle/app/oracle/diag/rdbms/db/db2/trace/db2_ora_14921.trc: ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [9592], [59130], [59523],[], [], [], [], [], [], [] ORA-600 signalled during: alter database open... Tue May 08 19:23:59 2012 Dumping diagnostic data in directory=[cdmp_20120508192359], requested by (instance=2, osi d=14921), summary=[incident=136280]. Tue May 08 19:24:02 2012 Sweep [inc][136280]: completed Sweep [inc2][136280]: completed
根据错误提示去看跟踪文件db2_ora_14921.trc,内容如下:
*** 2012-05-08 19:23:58.724 Started writing zeroblks thread 1 seq 9592 blocks 59130-59137 *** 2012-05-08 19:23:58.725 Completed writing zeroblks thread 1 seq 9592 ==== Redo read statistics for thread 1 ==== Total physical reads (from disk and memory): 251319Kb -- Redo read_disk statistics -- Read rate (ASYNC): 248115Kb in 1.32s => 183.56 Mb/sec Longest record: 12Kb, moves: 0/595301 (0%) Change moves: 3311/5533 (59%), moved: 4Mb Longest LWN: 1843Kb, moves: 59/1226 (4%), moved: 52Mb Last redo scn: 0x0000.3a3a0e61 (976883297) ---------------------------------------------- ----- Recovery Hash Table Statistics --------- Hash table buckets = 262144 Longest hash chain = 7 Average hash chain = 428179/232811 = 1.8 Max compares per lookup = 7 Avg compares per lookup = 1210066/1487056 = 0.8 ---------------------------------------------- WARNING! Crash recovery of thread 1 seq 9592 is ending at redo block 59130 but should not have ended before redo block 59523 Incident 136280 created, dump file: /oracle/app/oracle/diag/rdbms/db/db2/incident/incdir_ 136280/db2_ora_14921_i136280.trc ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [9592], [59130], [59523],[], [], [], [], [], [], [] 2012-05-08 19:23:59.436194 : Abort recovery for domain 0, flags = 0x4 2012-05-08 19:23:59.436306 : kjb_abort_recovery: domain flags=0x0, valid=0 ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [9592], [59130], [59523],[], [], [], [], [], [], [] 2012-05-08 19:23:59.436547 : Abort recovery for domain 0, flags = 0x4 2012-05-08 19:23:59.436565 : aborting recovery of 0 (0) with cluster inc 2 (0) recovery 1 2012-05-08 19:23:59.436576 : kjb_abort_recovery: domain flags=0x0, valid=0 ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [9592], [59130], [59523],[], [], [], [], [], [], []
看这段日志主要是下列信息.
ending at redo block 59130 but should not have ended before redo block 59523
也就是说需要恢复到rba到59523,可是现在因为某种原因,只能用线程1的日志恢复到59130.所以报错了.引起该问题的原因是由于在数据库打开的时候存储突然crash掉,数据库也就crash掉了,这就引起了联机重做日志丢失了写操作.
解决这个问题的办法就是有两种:
1.直接找到当前current log,然后进行recover database using backup controlfile until cancel.
2.重建控制文件进行恢复.启动数据库后,如果有备份信息,还要catalog重新注册备份信息.
我使用第一种方法成功OPEN了数据库.操作如下:
SQL> select a.member,a.group#,b.status from v$logfile a ,v$log b where a.group#=b.group#and b.status='CURRENT'; MEMBER GROUP# STATUS -------------------------------------------------------------------------------- +DATAVG/db/onlinelog/group_4.260.779314631 4 CURRENT +DATAVG/db/onlinelog/group_6.268.779320079 6 CURRENT SQL> recover database using backup controlfile until cancel ; ORA-00279: 更改 976756308 (在05/03/2012 22:54:33 生成) 对于线程 1 是必需的 ORA-00289: 建议: /oracle/app/oracle/product/11.2.0.3/db/dbs/arch1_9592_779314525.dbf ORA-00280: 更改 976756308 (对于线程 1) 是按序列 #9592 进行的 指定日志: {=suggested | filename | AUTO | CANCEL} +DATAVG/db/onlinelog/group_4.260.779314631 ORA-00279: 更改 976756308 (在04/24/2012 14:53:42 生成) 对于线程 2 是必需的 ORA-00289: 建议: /oracle/app/oracle/product/11.2.0.3/db/dbs/arch2_3814_779314525.dbf ORA-00280: 更改 976756308 (对于线程 2) 是按序列 #3814 进行的 指定日志: {=suggested | filename | AUTO | CANCEL} +DATAVG/db/onlinelog/group_6.268.779320079 完成介质恢复。 SQL> alter database open resetlogs; 数据库已更改。 SQL> select name,open_mode from v$database; NAME OPEN_MODE --------- -------------------- DB READ WRITE
参考文档:ORA-600 [kcratr_nab_less_than_odr] during Instance Recovery after Database Crash [ID 1299564.1]
Alter database open fails with ORA-00600 kcratr_nab_less_than_odr [ID 1296264.1]
Post a Comment