现象
数据库服务器出现ORA-00600[kcratr_nab_less_than_odr],不能open数据库
分析
1 2 3 4 |
SQL>ALTERDATABASEOPEN; ALTERDATABASEOPEN *第1行出现错误: ORA-00600:内部错误代码,参数:[kcratr_nab_less_than_odr],[1],[99189],[43531],[43569],[],[],[],[],[],[],[] |
查看alert日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
WedJan1113:56:162012 ALTERDATABASEOPEN Beginningcrashrecoveryof1threads parallelrecoverystartedwith2processes Startedredoscan Completedredoscan read54591KBredo,0datablocksneedrecovery Errorsinfiled:\dbdms\diag\rdbms\dbdms\dbdms\trace\dbdms_ora_3108.trc(incident=818557): ORA-00600:内部错误代码,参数:[kcratr_nab_less_than_odr],[1],[99189],[43531],[43569],[],[],[],[],[],[],[] Incidentdetailsin:d:\dbdms\diag\rdbms\dbdms\dbdms\incident\incdir_818557\dbdms_ora_3936_i818557.trc Abortingcrashrecoveryduetoerror600 Errorsinfiled:\dbdms\diag\rdbms\dbdms\dbdms\trace\dbdms_ora_3108.trc: ORA-00600:内部错误代码,参数:[kcratr_nab_less_than_odr],[1],[99189],[43531],[43569],[],[],[],[],[],[],[] Errorsinfiled:\dbdms\diag\rdbms\dbdms\dbdms\trace\dbdms_ora_3108.trc: ORA-00600:内部错误代码,参数:[kcratr_nab_less_than_odr],[1],[99189],[43531],[43569],[],[],[],[],[],[],[] ORA-600signalledduring:ALTERDATABASEOPEN... Tracedumpingisperformingid=[cdmp_20120110214555] |
查看trace文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Tracefiled:\dbdms\diag\rdbms\dbdms\dbdms\trace\dbdms_ora_3108.trc
OracleDatabase11gEnterpriseEditionRelease11.2.0.1.0-64bitProduction
WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions
WindowsNTVersionV6.1ServicePack1
CPU:2-type8664,2PhysicalCores
ProcessAffinity:0x0x0000000000000000
Memory(Avail/Total):Ph:2250M/4060M,Ph+PgF:5868M/8119M
Instancename:dbdms
Redothreadmountedbythisinstance:1
Oracleprocessnumber:17
Windowsthreadid:3108,image:ORACLE.EXE(SHAD)
…………………………
WARNING!Crashrecoveryofthread1seq99189is
endingatredoblock43531butshouldnothaveendedbefore
redoblock43569
Incident826550created,dumpfile:d:\dbdms\diag\rdbms\dbdms\dbdms\incident\incdir_826550\dbdms_ora_3108_i826550.trc
ORA-00600:??????,??:[kcratr_nab_less_than_odr],[1],[99189],[43531],[43569],[],[],[],[],[],[],[]
ORA-00600:??????,??:[kcratr_nab_less_than_odr],[1],[99189],[43531],[43569],[],[],[],[],[],[],[]
ORA-00600:??????,??:[kcratr_nab_less_than_odr],[1],[99189],[43531],[43569],[],[],[],[],[],[],[]
通过alert和trace中的内容可以知道,数据库需要恢复到rba到43569,但是因为某种原因实例恢复的时候,只能利用1thread99189seq#,恢复rba到43531。从而导致数据库无法正常open
ThisProblemiscausedbyStorageProblemoftheDatabaseFiles.
TheSubsystem(eg.SAN)crashedwhiletheDatabasewasopen.
TheDatabasethencrashedsincetheDatabaseFileswerenotaccessibleanymore.
ThiscausedalostWriteintotheOnlineRedoLogsandsoInstanceRecoveryisnotp
ossibleandraisingtheORA-600.
|
解决方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
SQL>SELECTSTATUSFROMV$INSTANCE;
STATUS
------------
MOUNTED
--尝试直接recoverdatabase
SQL>RECOVERDATABASE;
ORA-00283:恢复会话因错误而取消
ORA-00264:不要求恢复
--提示不用恢复
--再打开数据库,还是kcratr_nab_less_than_odr错误警告
SQL>ALTERDATABASEOPEN;
ALTERDATABASEOPEN
*
第1行出现错误:
ORA-00600:内部错误代码,参数:[kcratr_nab_less_than_odr],[1],[99189],[43531],[43569],[],[],[],[],[],[],[]
--尝试不完全恢复
SQL>RECOVERDATABASEUNTILCANCEL;
ORA-10879:errorsignaledinparallelrecoveryslave
ORA-01547:警告:RECOVER成功但OPENRESETLOGS将出现如下错误
ORA-01152:文件1没有从过旧的备份中还原
ORA-01110:数据文件1:'D:\DBDMS\DATA\SYSTEM01.DBF'
--重建控制文件
SQL>ALTERDATABASEBACKUPCONTROLFILETOTRACEAS'D:/1.TXT';
数据库已更改。
SQL>SHUTDOWNIMMEDIATE;
ORA-01109:数据库未打开
已经卸载数据库。
ORACLE例程已经关闭。
SQL>STARTUPNOMOUNT;
ORACLE例程已经启动。
TotalSystemGlobalArea417546240bytes
FixedSize2176328bytes
VariableSize268438200bytes
DatabaseBuffers138412032bytes
RedoBuffers8519680bytes
SQL>
createcontrolfilereusedatabase'AFC010C1'noresetlogsnoarchivelog
maxlogfiles16
maxlogmembers4
maxdatafiles100
maxinstances8
maxloghistory18688
logfile
group1('/oracle/redo1/AFC010C1/redo01a.log','/oracle/redo2/AFC010C1/redo01b.log')size50Mblocksize512,
group2('/oracle/redo1/AFC010C1/redo02a.log','/oracle/redo2/AFC010C1/redo02b.log')size50Mblocksize512,
group3('/oracle/redo1/AFC010C1/redo03a.log','/oracle/redo2/AFC010C1/redo03b.log')size50Mblocksize512,
group4('/oracle/redo1/AFC010C1/redo04a.log','/oracle/redo2/AFC010C1/redo04b.log')size50Mblocksize512
DATAFILE
'/oracle/data1/AFC010C1/AFC_BIZ_DATA01.dbf',
'/oracle/data1/AFC010C1/AFC_LOG_DATA01.dbf',
'/oracle/data1/AFC010C1/AFC_TXN_DATA01.dbf',
'/oracle/data1/AFC010C1/AFC_CD_DATA01.dbf',
'/oracle/data1/AFC010C1/AFC_RPT_DATA01.dbf',
'/oracle/data1/AFC010C1/AFC_WS_DATA01.dbf',
'/oracle/data1/AFC010C1/sysaux01.dbf',
'/oracle/data1/AFC010C1/AFC_EOD_DATA01.dbf',
'/oracle/data1/AFC010C1/AFC_SYSCD_DATA01.dbf',
'/oracle/data1/AFC010C1/DBMGR_DATA01.dbf',
'/oracle/data1/AFC010C1/system01.dbf',
'/oracle/data2/AFC010C1/AFC_BIZ_INDX01.dbf',
'/oracle/data2/AFC010C1/AFC_CD_INDX01.dbf',
'/oracle/data2/AFC010C1/AFC_EOD_INDX01.dbf',
'/oracle/data2/AFC010C1/AFC_LOG_INDX01.dbf',
'/oracle/data2/AFC010C1/AFC_RPT_INDX01.dbf',
'/oracle/data2/AFC010C1/AFC_SYSCD_INDX01.dbf',
'/oracle/data2/AFC010C1/AFC_TXN_INDX01.dbf',
'/oracle/data2/AFC010C1/AFC_WS_INDX01.dbf',
'/oracle/data2/AFC010C1/DBMGR_INDX01.dbf',
'/oracle/data2/AFC010C1/undotbs01.dbf',
'/oracle/data2/AFC010C1/users01.dbf'
charactersetzhs16gbk;
控制文件已创建。
--继续尝试恢复
SQL>RECOVERDATABASE;
完成介质恢复。
SQL>ALTERDATABASEOPEN;
数据库已更改。
--open成功
在这次恢复中,主要就是重建控制文件,然后直接恢复成功,如果redo有损坏,那么可能需要使用不完全恢复,然后使用resetlogs打开数据库
|
本文详细解析了Oracle数据库中ORA-00600错误的具体原因,尤其针对[kcratr_nab_less_than_odr]错误,并提供了完整的恢复流程,包括重建控制文件和进行数据库恢复,最终成功解决了数据库无法open的问题。
3730

被折叠的 条评论
为什么被折叠?



