一次oracle数据库数据块损坏的处理过程(一)

2014-11-24 16:55:58 · 作者: · 浏览: 8

1.1 报错ORA-600 [kcratr_nab_less_than_odr],不能启动

1,现象描述:服务器存储断电,导致数据库down机,再次尝试启动数据库,数据库不能正常启动,数据库报错如下

SQL> alter database open;

alter database open
*

ERROR at line 1:

ORA-00600: internal error code, arguments:[kcratr_nab_less_than_odr], [1], [2022], [523240], [523468], [], [], [], [],[], [], []
2,查看alert日志,数据库启动时,已开始日志恢复,但恢复时报错ORA-600,除了生成一个trc文件外,没有更详细的信息
Thu Feb 06 23:13:19 2014

ALTER DATABASE OPEN

Beginning crash recovery of 1 threads

 parallel recovery started with 3 processes

Started redo scan

Completed redo scan

 read1580 KB redo, 211 data blocks need recovery

Errors in file/app/oracle/diag/rdbms/epm/epm1/trace/epm1_ora_4679.trc  (incident=375883):

ORA-00600: internal error code, arguments:[kcratr_nab_less_than_odr], [1], [2022], [523240], [523468], [], [], [], [],[], [], []

Incident details in:/app/oracle/diag/rdbms/epm/epm1/incident/incdir_375883/epm1_ora_4679_i375883.trc

Aborting crash recovery due to error 600

Errors in file/app/oracle/diag/rdbms/epm/epm1/trace/epm1_ora_4679.trc:

ORA-00600: internal error code, arguments:[kcratr_nab_less_than_odr], [1], [2022], [523240], [523468], [], [], [], [],[], [], []

Errors in file/app/oracle/diag/rdbms/epm/epm1/trace/epm1_ora_4679.trc:

ORA-00600: internal error code, arguments:[kcratr_nab_less_than_odr], [1], [2022], [523240], [523468], [], [], [], [],[], [], []

ORA-600 signalled during: ALTER DATABASEOPEN...

Trace dumping is performingid=[cdmp_20140206231320]
3,查看trc文件,通过WARNING可以看出,数据库恢复时认为seq2022(对应日志文件)中的记录,应该恢复到523240,但是恢复到523468却被迫停止了。应该是控制文件和日志文件记录不完全一致导致,注意这几个数据正好对应到kcratr_nab_less_than_odr的几个参数:[kcratr_nab_less_than_odr],[1], [2022], [523240], [523468]

*** 2014-02-06 23:37:11.872

Successfully allocated 3 recovery slaves

Using 45 overflow buffers per recoveryslave

Thread 1 checkpoint: logseq 2022, block 2,scn 9187726619852

 cache-low rba: logseq 2022, block 520079

   on-disk rba: logseq 2022, block 523468, scn 9187726672777

 start recovery at logseq 2022, block 520079, scn 0


*** 2014-02-06 23:37:11.890

Started writing zeroblks thread 1 seq 2022blocks 523240-523247

----------------------------------------------

WARNING! Crash recovery of thread 1 seq2022 is

ending at redo block 523240 but should nothave ended before

redo block 523468

Incident 375884 created, dump file:/app/oracle/diag/rdbms/epm/epm1/incident/incdir_375884/epm1_ora_4971_i375884.trc

ORA-00600: internal error code, arguments:[kcratr_nab_less_than_odr], [1], [2022], [523240], [523468], [], [], [], [],[], [], []

ORA-00600: internal error code, arguments:[kcratr_nab_less_than_odr], [1], [2022], [523240], [523468], [], [], [], [],[], [], []

ORA-00600: internal error code, arguments:[kcratr_nab_less_than_odr], [1], [2022], [523240], [523468], [], [], [], [],[], [], []

4,查询metalink,已有相关案例,主要是由于存储突然断电,导致向在线日志文件中写日志失败。

This Problem is caused by Storage Problemof the Database Files. The Subsystem (eg. SAN) crashed while the Database wasopen. The Database then crashed since the Database Files were not accessibleanymore. This caused a lost Write into the Online RedoLogs and so InstanceRecovery is not possible and raising the ORA-600.

官网中提供的解决办法是通过备份的控制文件恢复数据库,然后resetlog启动,当然如果没有备份,也可以通过参考文件中重建控制文件的方法。