当前位置: 首页 > 工具软件 > Headroom > 使用案例 >

oracle在服务器断电重启后启动报错ORA-00600: internal error code, arguments: [kcm_headroom_warn_1], []

丌官子安
2023-12-01

一、错误场景介绍。

数据库:11.2.0.4(单实例,没有任何备份)
系统:Centos 6.5(虚拟机)

由于机房断电导致oracle数据库(单实例)所在服务器的虚拟服务器出现问题,在经过恢复后虚拟服务正常,打开虚拟服务中的数据库所在的虚拟机后,启动数据库,报错如下:

[oracle@host ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Thu Jan 3 01:34:07 2013

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 1.3462E+10 bytes
Fixed Size                  2265984 bytes
Variable Size            6677335168 bytes
Database Buffers         6777995264 bytes
Redo Buffers                4460544 bytes
Database mounted.
ORA-00600: internal error code, arguments: [kcm_headroom_warn_1], [], [], [],
[], [], [], [], [], [], [], []

二、出现错误的原因。
原因很简单,恢复后的虚拟服务器中的虚拟机中所有的系统时间全部变为初始搭建时的系统时间:

[root@host ~]# date
2014年 3月 12日 星期三 10:30:32 CST

所以导致了数据库SCN异常,查看告警日志会发现启动过程中类似如下日志(由于是内网无法拷贝日志,一下日志为样例,与本次日志大体类似):

MMNL started with pid=19, OS id=3579 
ORACLE_BASE not set in environment. It is recommended
that ORACLE_BASE be set in the environment
Reusing ORACLE_BASE from an earlier startup = /ora1/prod/db/tech_st
Mon Aug 07 06:13:32 2000
ALTER DATABASE   MOUNT
Successful mount of redo thread 1, with mount id 4111810188
Database mounted in Exclusive Mode
Lost write protection disabled
Completed: ALTER DATABASE   MOUNT
Mon Aug 07 06:13:36 2000
ALTER DATABASE OPEN
************************************************************
Warning: The SCN headroom for this database is only -51464 hours!
************************************************************
Errors in file /ora1/prod/db/tech_st/11.2.0/admin/prod_erpdb1/diag/rdbms/prod/prod/trace/prod_ora_3583.trc  (incident=441878):
ORA-00600: internal error code, arguments: [kcm_headroom_warn_1], [], [], [], [], [], [], [], [], [], [], []
Incident details in: /ora1/prod/db/tech_st/11.2.0/admin/prod_erpdb1/diag/rdbms/prod/prod/incident/incdir_441878/prod_ora_3583_i441878.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Errors in file /ora1/prod/db/tech_st/11.2.0/admin/prod_erpdb1/diag/rdbms/prod/prod/trace/prod_ora_3583.trc:
ORA-00600: internal error code, arguments: [kcm_headroom_warn_1], [], [], [], [], [], [], [], [], [], [], []
ORA-600 signalled during: ALTER DATABASE OPEN...
Dumping diagnostic data in directory=[cdmp_20000807061339], requested by (instance=1, osid=3583), summary=[incident=441878].
Mon Aug 07 06:14:35 2000
Sweep [inc][441878]: completed
Sweep [inc2][441878]: completed

三、处理方法
在此说一下本人建议和自己没有检查彻底发现问题真正原因采取的方法。

建议:

如果你一开始启动报错发现此问题,先不要再操作数据库,将数据库关闭,然后将系统时间修改正常后再进行启动,应该会恢复正常,本此现场场景没有按照这个方式进行,所以并未检测此方式是否能切实解决此问题,只作为参考建议。

本次现场处理过程:

在现场人员启动数据库发现问题后,怀疑是断电导致的数据文件scn不一致或者数据文件损坏的。所以首先按照的是数据文件头scn不一致进行处理,利用backup controlfile进行恢复,利用联机日志:

recover database using backup controlfile;

Specify log: {<RET>=suggested | fukename | AUTO | CANCEL}
/data/app/oracle/oradata/ORCL/redo01.log

Specify log: {<RET>=suggested | fukename | AUTO | CANCEL}
/data/app/oracle/oradata/ORCL/redo02.log

Specify log: {<RET>=suggested | fukename | AUTO | CANCEL}
/data/app/oracle/oradata/ORCL/redo03.log

Specify log: {<RET>=suggested | fukename | AUTO | CANCEL}
/data/app/oracle/oradata/ORCL/redo04.log

但是由于系统时间并未更改正确,操作并未成功。在查看告警日志时才注意到启动日志中日期不对,才意识到可能系统时间导致的,将数据库关闭,修改正确的系统时间,然后启动数据库,以为可以正常启动,可能是因为之前的操作,所以启动时报错变成了如下:

SQL> startup
ORACLE instance started.

Total System Global Area 1.3462E+10 bytes
Fixed Size                  2265984 bytes
Variable Size            6677335168 bytes
Database Buffers         6777995264 bytes
Redo Buffers                4460544 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

到此如果直接执行alter database open resetlogs,会直接提示:

SQL> alter database open resetlogs;
alter database open resetlogs;
*

ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/data/app/oracle/oradata/ORCL/system01.dbf'

还是利用联机日志进行恢复:

recover database using backup controlfile;

Specify log: {<RET>=suggested | fukename | AUTO | CANCEL}
/data/app/oracle/oradata/ORCL/redo01.log
Log applied
Media recovery complete

提示恢复成功。然后以resetlogs打开数据库:

SQL> alter database open resetlogs;

Database altered

数据库正常打开。如果继续使用该数据库实例,建议打开数据库后进行一次备份。

以上操作省略了部分不重要的日志输出,此操作过程仅供参考,切记不要盲目跟从,出现问题先从告警日志查看为先,防止将简单的问题复杂化。谨记!

强烈建议及时做好备份!!!!

 类似资料: