ORA-00600: [kcratr_nab_less_than_odr], [1], [9592], [59130], [59523]错误解决

情况是这样的,晚上接到一个电话,客户数据库无法启动,启动的时候报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

Your email is never published nor shared. Required fields are marked *