欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

ORA-00600 [kcratr_nab_less_than_odr]

程序员文章站 2024-02-02 10:55:58
...

最近整个IT的运气有点背,先是机房的停电事件。最近又发生了一个事故,有台虚拟机的硬盘坏掉了,导致安装在虚拟机上面的应用和数

【说明】最近整个IT的运气有点背,先是机房的停电事件。最近又发生了一个事故,,有台虚拟机的硬盘坏掉了,导致安装在虚拟机上面的应用和数据库全部起不来了。经过一番折腾虚拟机终于起来了,但是启动的时候报错了:

SQL> startup
Oracle instance started.

Total System Global Area 6747725824 bytes
Fixed Size 2213976 bytes
Variable Size 4362078120 bytes
Database Buffers 2348810240 bytes
Redo Buffers 34623488 bytes
Database mounted.
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1],[6674], [13272], [13337], [], [], [], [], [], [], []

alert报警日志如下:

Recovery of Online Redo Log: Thread 1 Group 2 Seq 6674 Reading mem 0
Mem# 0: /oracle/oradata/klekpj/redo02.log
Media Recovery Complete (klekpj)
Completed: alter database recover if needed
start
Tue Jun 23 16:11:45 2015
alter database open
Beginning crash recovery of 1 threads
parallel recovery started with 7 processes
Started redo scan
Completed redo scan
read 1900 KB redo, 0 data blocks need recovery
Errors in file /oracle/diag/rdbms/klekpj/klekpj/trace/klekpj_ora_19307.trc (incident=9755):
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [6674], [13272], [13337], [], [], [], [], [], [], []
Incident details in: /oracle/diag/rdbms/klekpj/klekpj/incident/incdir_9755/klekpj_ora_19307_i9755.trc
Aborting crash recovery due to error 600
Errors in file /oracle/diag/rdbms/klekpj/klekpj/trace/klekpj_ora_19307.trc:
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [6674], [13272], [13337], [], [], [], [], [], [], []
Errors in file /oracle/diag/rdbms/klekpj/klekpj/trace/klekpj_ora_19307.trc:
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [6674], [13272], [13337], [], [], [], [], [], [], [

解决方法:

SQL> startup mount;
ORACLE instance started.

Total System Global Area 6747725824 bytes
Fixed Size 2213976 bytes
Variable Size 4362078120 bytes
Database Buffers 2348810240 bytes
Redo Buffers 34623488 bytes
Database mounted.
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 1974040004 generated at 06/10/2015 16:04:16 needed for thread
1
ORA-00289: suggestion : /oracle/arch/1_6674_829596422.dbf
ORA-00280: change 1974040004 for thread 1 is in sequence #6674

Specify log: {=suggested | filename | AUTO | CANCEL}
CANCEL
Media recovery cancelled.
SQL> alter database open resetlogs;

Database altered.

数据库成功打开了

原因分析:

ALTER DATABASE RECOVER database using backup controlfile until cancel
Media Recovery Start
started logmerger process
Parallel Media Recovery started with 8 slaves
ORA-279 signalled during: ALTER DATABASE RECOVER database using backup controlfile until cancel ...
Tue Jun 23 16:56:20 2015
ALTER DATABASE RECOVER CANCEL
Media Recovery Canceled
Completed: ALTER DATABASE RECOVER CANCEL
alter database open resetlogs
Archived Log entry 6334 added for thread 1 sequence 6673 ID 0xf5f2c983 dest 1:
Tue Jun 23 16:56:31 2015
Archived Log entry 6335 added for thread 1 sequence 6674 ID 0xf5f2c983 dest 1:
Archived Log entry 6336 added for thread 1 sequence 6672 ID 0xf5f2c983 dest 1:
RESETLOGS after incomplete recovery UNTIL CHANGE 1974040004

因为服务器的异常断电导致LGWR写ONLINE REDOLOG文件失败,当然数据也没有写入到数据文件中。下次启动数据库的时候需要做异常恢复,但是从ONLINE REDOLOG里面读取这些REDO信息的时候又找不到,所以打开的时候就报错了。

ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [6674], [13272], [13337], [], [], [], [], [], [], []

数据进行恢复的时候,需要从onine redo log 1seq#6674的log,从13272恢复到13337。