简单记录一次ORA-00600 kcratr_nab_less_than_odr

来源:互联网 发布:淘宝怎么更换支付宝 编辑:程序博客网 时间:2024/06/08 18:09

当前详细报错已经没有了,只有相应图。参考EYGLE一篇文章中数据:

1.故障现象

数据库版本11G,错误类似以下:

ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr]错误,具体的错误信息类似:
Incident 63078 created, dump file: /u01/diag/rdbms/orcl/orcl/incident/incdir_63078/orcl_ora_1916_i63078.trc
ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [3313], [2328320], [2334233], [], [], [], [], [], [], []
ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [3313], [2328320], [2334233], [], [], [], [], [], [], []
ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr], [1], [3313], [2328320], [2334233], [], [], [], [], [], [], []

ALERT日志中有以下:

Thread 1 checkpoint: logseq 3313, block 2, scn 5965899084787
  cache-low rba: logseq 3313, block 1484161
    on-disk rba: logseq 3313, block 2334233, scn 5965899135009
  start recovery at logseq 3313, block 1484161, scn 0

600错误中的1,3313的含义,是Thread 1 logseq 3313,那么剩下的就应该是恢复时的rba地址,错误提示中的2334233是On-Disk Rba,是恢复应该到达的终点,而2328320小于On-Disk Rba,就应该是Less Than里面提到的恢复的终点,因为没有到达Redo的最后位置,被认为是非法的,可能丢失数据。
TRACE文件中会有相应的提示:

WARNING! Crash recovery of thread 1 seq 3313 is
ending at redo block 2328320 but should not have ended before
redo block 2334233

我遇到的问题当时只有图片如下


原因可能是因为实例恢复的进度不够(因为Redo丢失或者硬件故障导致的REDO不完整--坏块)。

这一点可以从当时报错的TRACE文件的图片中得到验证。

从图中可以看到,需要最少恢复到的ON DISK RBA是block24955,而当前能恢复到的是24957,有部分块丢失,因此报错。

2.故障解决

首先尝试通过RECOVER DATABASE; RECOVERDATABASEUNTIL CANCEL;等方式进行恢复,但是未解决此问题。

最终通过重建控制文件、再进行不完全恢复来OPEN数据库。(前提是客户只要求OPEN库,是客户的测试库,丢些数据没关系,如果是生产库不允许丢数据,此方法就不适用了)

使用命令类似以下:

MOUNT状态下: ALTERDATABASEBACKUP CONTROLFILE TOTRACE AS'/home/oracle/a.txt';

使用备份的控制文件中内容,在SQLPLUS窗口执行类似以下:

CREATECONTROLFILE REUSE DATABASE…………

Alter database recover database until cancel using backup controlfile;

Alter database open resetlogs;  

并新建临时表空间。

参考链接:http://www.xifenfei.com/2347.html      http://www.eygle.com/archives/2010/05/kcratr_nab_less_than_odr.html
0 1
原创粉丝点击