Oracle 11g RAC节点意外Crash不能只查数据库日志,因硬件异常(如内存故障、CPU过热、电源不稳)可能触发IPMI硬重启,跳过OS关机流程,导致ocssd.bin等进程无预警终止且alert.log无ORA错误;应直接查IPMI SEL日志确认Power Cycle等事件时间戳是否与宕机吻合,并结合vmcore中MCE/ECC/ACPI S5等线索区分软硬故障,同时排查网卡中断绑定、BIOS C-States及内存插槽混插等易忽略的硬件配置问题。
oracle 11g rac节点意外crash,不能只查数据库日志——硬件层异常(如内存故障、cpu过热、电源不稳)会直接触发ipmi硬重启,跳过os正常关机流程,导致ocssd.bin、crsd.bin等进程无预警终止,alert.log里甚至可能没留下任何ora错误。
怎么看IPMI是否介入了节点重启
别依赖last reboot或wtmp,它们在硬重启后不可靠。直接查IPMI日志:
- 用
ipmitool -I lanplus -H <ipmi_ip> -U root -P <password> sel list</password></ipmi_ip>导出系统事件日志(SEL),重点找Power Unit: Power off/down、Processor: CPUx is asserted、Memory: Correctable ECC error threshold exceeded这类条目 - 检查时间戳是否与RAC节点宕机时间完全吻合(精确到秒);若SEL里有“Power Cycle”且发生在
ocssd挂掉前10秒内,基本可断定是IPMI强制断电 - 物理服务器需确认BMC固件版本是否已知存在bug(例如Dell iDRAC 2.80.80.80在高负载下误报温度超限)
内核转储(vmcore)里哪些线索能区分软崩溃和硬故障
RAC节点Crash后若生成/var/crash/下的vmcore,用crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/*/vmcore分析:
- 执行
log命令看最后几行:出现Hardware Error、MCE: CPU x: Machine Check Exception、EDAC MCx: UE over limit→ 硬件级错误,不是Oracle问题 - 执行
ps | grep -E "(ocssd|crsd|evmd)":若所有Oracle Clusterware进程状态为Z(zombie)或根本不存在,说明进程被OS强制杀死,而非主动退出 - 执行
bt -a看各CPU栈:若多个CPU都卡在acpi_enter_s5或native_machine_shutdown,大概率是IPMI下发了S5指令
为什么ocssd.bin总在Crash前报signal 11却不是Oracle Bug
HP-UX/AIX/Linux上ocssd.bin收到SIGSEGV(signal 11)常是表象而非根因:
- 硬件ECC内存纠错失败后,CPU可能向正在访问坏地址的
ocssd.bin投递SIGSEGV,但ocssd只是受害者,不是肇事者 - AIX下
clssscExit: CSSD signal 11 in thread GMClientListener若伴随errpt -a | grep -i "hardware\|memory"输出,优先排查DIMM插槽接触不良或PSU电压波动 - Linux下用
dmesg -T | grep -i "mce\|ecc\|machine check"比翻trace文件更直接——ocssd崩溃前1秒内若有MCE日志,就别再调Oracle参数
硬件配置层面最容易被忽略的三个坑
RAC对硬件稳定性要求远高于单实例,以下配置问题在压力下极易诱发静默Crash:
- 网卡中断绑定不均:私网网卡(如eth2)中断全集中在CPU0,该CPU软中断耗尽后,
ocssd收不到心跳包,触发驱逐;用cat /proc/interrupts | grep eth2确认中断是否分散到多个CPU - BIOS中C-states未禁用:Intel CPU的C6/C7深度休眠状态会导致
ocssd心跳响应延迟超时,必须在BIOS里关闭C-States和Enhanced Intel SpeedStep - 内存插槽混插不同规格DIMM:即使容量/频率相同,不同厂商颗粒的时序差异在RAC高GC压力下会放大为随机ECC错误,
dmidecode -t memory要确保所有slot的Part Number和Serial Number完全一致
真正棘手的是那些不报错的硬件老化——比如电源模块纹波增大导致CPU偶尔取指错误,这种问题不会写进alert.log,也不会触发IPMI告警,只能靠vmcore里的寄存器快照和dmesg中零星的Hardware Corrupted痕迹交叉印证。


















