当前详细报错已经没有了,只有相应图。参考EYGLE一篇文章中数据:
数据库版本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,有部分块丢失,因此报错。
首先尝试通过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