当前具体报错已经没有了,仅仅有对应图。參考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