现象
数据库服务器出现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打开数据库 |