停电导致 Oracle 集群数据库无法启动(11.2.0.4)
根据 Oracle 官方文档(Doc ID 1296264.1,标题:Alter database open fails with ORA-00600 kcratr_nab_less_than_odr)进行匹配,文档中描述的 “电源故障后数据库打开失败” 症状,与当前故障现象一致。针对控制文件逻辑损坏问题,提供两种解决思路,由于环境未测试环境,未进行备份,本次操作选择 “方案 2:重建控制文件”通
·
停电导致 Oracle 集群数据库无法启动(11.2.0.4)
故障现象:启动数据库报错
- alter日志报错如下:
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_ora_5843.trc (incident=20658):
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [494], [41817], [42055], [], [], [], [], [], [], []
Incident details in: /u01/app/oracle/diag/rdbms/orcl/orcl2/incident/incdir_20658/orcl2_ora_5843_i20658.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Abort recovery for domain 0
Aborting crash recovery due to error 600
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_ora_5843.trc:
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [494], [41817], [42055], [], [], [], [], [], [], []
Abort recovery for domain 0
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_ora_5843.trc:
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [494], [41817], [42055], [], [], [], [], [], [], []
ORA-600 signalled during: ALTER DATABASE OPEN /* db agent *//* {2:25804:192} */...
Thu Aug 28 18:52:26 2025
Dumping diagnostic data in directory=[cdmp_20250828185226], requested by (instance=2, osid=5843), summary=[incident=20658].
Thu Aug 28 18:52:27 2025
Shutting down instance (abort)
License high water mark = 1
USER (ospid: 6106): terminating the instance
Instance terminated by USER, pid = 6106
Thu Aug 28 18:52:28 2025
Instance shutdown complete
排查与解决
故障现象:启动数据库报错
通过 Grid 启动数据库时失败,查看 alter 日志,关键报错信息如下:
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_ora_5843.trc (incident=20658):ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [494], [41817], [42055], [], [], [], [], [], [], []Incident details in: /u01/app/oracle/diag/rdbms/orcl/orcl2/incident/incdir_20658/orcl2_ora_5843_i20658.trcAbort recovery for domain 0Aborting crash recovery due to error 600Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_ora_5843.trc:ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [494], [41817], [42055], [], [], [], [], [], [], []ORA-600 signalled during: ALTER DATABASE OPEN /* db agent *//* {2:25804:192} */...Thu Aug 28 18:52:27 2025Shutting down instance (abort)Instance terminated by USER, pid = 6106Thu Aug 28 18:52:28 2025Instance shutdown complete

排查过程
根据 Oracle 文档(Doc ID 1296264.1,标题:Alter database open fails with ORA-00600 kcratr_nab_less_than_odr)进行匹配,文档中描述的 “电源故障后数据库打开失败” 症状,与当前故障现象一致
故障原因
本次故障根源为:电力故障导致控制文件逻辑损坏
解决方案
针对控制文件逻辑损坏问题,提供两种解决思路,由于环境未测试环境,未进行备份,本次操作选择 “方案 2:重建控制文件”
-
方案 1:使用备份控制文件恢复数据库
-
方案 2:使用控制文件重建脚本重建控制文件
具体操作步骤
启动数据库到 mount 状态
执行命令将数据库启动至 mount 模式,确保后续可操作控制文件。
关闭集群,仅保留单边节点运行
- 先执行命令关闭集群功能(避免重建控制文件时节点冲突):
ALTER SYSTEM SET CLUSTER_DATABASE=FALSE SCOPE=SPFILE;
- 关闭两个节点的数据库,只启动其中一个节点(单边运行,否则重建控制文件会失败)。
连接 RMAN 工具
通过命令连接 RMAN,用于后续确认控制文件相关信息.
确认控制文件位置
在 RMAN 中查看并记录控制文件的实际存储路径,确保后续操作目标正确

生成控制文件重建脚本
执行以下 SQL 命令,生成用于重建控制文件的 trace 脚本:
SQL> Oradebug setmypid -- 绑定当前会话进程
SQL> Alter session set tracefile_identifier='controlfilerecreate' ; -- 给trace文件加标识,方便查找
SQL> Alter database backup controlfile to trace noresetlogs; -- 生成控制文件备份脚本(不重置日志)
SQL> Oradebug tracefile_name ; -- 查看生成的trc文件路径

执行 trc 脚本重建控制文件
找到步骤 5 生成的 trc 文件,通过 SQL 命令执行脚本,完成控制文件重建:
SQL> @/u01/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_ora_27995_controlfilerecreate.trc
恢复集群配置并重启数据库
- 重新开启集群功能:
ALTER SYSTEM SET CLUSTER_DATABASE=TRUE SCOPE=SPFILE;
- 关闭当前数据库,再正常启动:
SQL> Shutdown immediate;
SQL> startup
更多推荐



所有评论(0)