ORA-00600在Oracle 11g RAC中明确指向内核逻辑缺陷或状态校验失败,高频源于未打最新PSU(如11.2.0.4.220118),典型参数krbcbp_9[2662]均对应已知竞态Bug,需严格验证补丁完整性及存储层健康状态。
ora-00600 在 oracle 11g rac 环境中不是“偶发异常”,而是明确指向内核逻辑缺陷或状态校验失败——尤其当它反复出现在相同操作路径(如 alter database open、rman recover 或节点间控制文件同步)时,大概率是已知 bug 引发,而非数据损坏或配置失误。
ORA-00600 在 11g RAC 中高频触发的典型补丁缺口
11.2.0.4 是长期支持版本,但其初始发布版(2013年)存在大量未修复的 RAC 特有竞态条件。Oracle 后续通过季度 PSU(Patch Set Update)持续修补,而很多现场故障都卡在「没打最新 PSU」这一环:
-
[krbcbp_9]:多见于第二个节点MOUNT时因控制文件 SCN 或 LMON 共享内存结构不一致报错,MOS 文档 ID 1683792.1 明确指出该问题在 PSU 11.2.0.4.180116(2018年1月)中修复 -
[kdsgrp1]:RAC 下索引段头解析失败,常伴随SELECT扫描 AWL/ASH 表出错,补丁 20841529(含在 PSU 11.2.0.4.190115)修正了全局缓存层对空段头的误判 -
[2662]:SCN 跳变引发的跨节点校验失败,在非归档模式 RAC 中更易暴露,PSU 11.2.0.4.160119 起引入更宽松的 SCN 比较逻辑
不打 PSU 的后果不是“可能出错”,而是“只要触发特定并发序列就必现”——比如同时执行 SWITCH DATAFILE ALL + 节点重启,或 ADG 备库应用日志时主库恰好做 RMAN 备份。
如何确认你缺的是哪个 PSU
别只看 opatch lsinventory 输出的“Latest”字样。真实情况是:
- 运行
select * from v$version;确认实际版本字符串(例如11.2.0.4.0不代表没打补丁,需结合BANNER后缀) - 查
$ORACLE_HOME/cfgtoollogs/opatch/opatch_history.txt,搜索PSU和日期,确认最后安装的是哪一期(如11.2.0.4.190115) - 对照 MOS 文档 ID 1454618.1 的「11.2.0.4 PSU Release Schedule」表格,检查你当前 PSU 是否已过期(截至 2026 年 5 月,最新为
11.2.0.4.220118) - 若 trace 文件中出现
[qerixStart: kdstgr]或[kjmxpmap]等冷门参数,直接查 MOS 的ORA-600 Lookup Tool,输入完整参数和版本,它会返回精确的补丁号(如29834793)
漏掉一个 PSU,往往意味着同时漏掉几十个底层修复——其中某个就刚好堵住你正在踩的坑。
打 PSU 前必须验证的三件事
RAC 环境打补丁不是单实例 opatch apply 那么简单,以下三项不验证,90% 会失败回滚:
- 所有节点的
$ORACLE_HOME必须完全一致(包括权限、软链接指向、时间戳),用diff -r node1_home node2_home | grep -E "(bin|lib|rdbms)"快速扫一遍 -
crsctl check cluster和crsctl check crs必须全绿;若曾手动改过oraagent脚本或ohasd配置,先crsctl replace votedisk再继续 - 关键补丁(如含
OCW组件更新的 PSU)要求所有节点先停 DB 实例,但 不能 用srvctl stop database—— 必须逐节点执行sqlplus / as sysdba→shutdown immediate,否则 OCR 中残留的资源状态会导致 patch 后 CRS 无法识别实例
补丁过程本身耗时约 20–40 分钟/节点,但验证环节省不得。曾有案例因跳过 crsctl check cluster,打完 PSU 后 CRS 自动拉起实例时反复报 ORA-00600 [kgxgncin_2],根源只是节点 2 的 ora.crsd 进程未真正退出。
最关键的一点:PSU 不是万能膏药。如果 ORA-00600 出现在打完最新 PSU 后,且 trace 文件里明确指向物理块地址(如 rdba: 0x0826fc91),说明问题已下沉到存储层——这时候再打补丁毫无意义,该换磁盘或重做 ASM diskgroup 了。


















