跳过正文

记一次 Oracle RAC 节点反复重启:从告警日志到 vmcore 定位 CPU 硬件故障

Greatfinish
作者
Greatfinish
记录 Oracle、PostgreSQL、达梦、Linux、存储与生产环境故障处理经验。
目录

一、故障概述与系统环境
#

1.1 故障概述
#

2026 年 7 月 12 日至 7 月 14 日,Oracle RAC 数据库节点 sydb2 在运行期间多次突然失联并自动重启。

节点重新启动后,Oracle Clusterware 和数据库实例曾短暂恢复,但随后又出现以下异常:

CRS-4535: Cannot communicate with Cluster Ready Services
CRS-4530: Communications failure contacting Cluster Synchronization Services daemon
CRS-4534: Cannot communicate with Event Manager

Clusterware 初始化资源曾出现以下两类状态:

第一类:

ora.cssd    ONLINE
ora.asm     ONLINE
ora.ctssd   ONLINE
ora.crsd    INTERMEDIATE
ora.evmd    INTERMEDIATE

第二类:

ora.cssd    OFFLINE
ora.asm     OFFLINE
ora.ctssd   OFFLINE
ora.crsd    OFFLINE
ora.evmd    OFFLINE

经 Oracle 数据库告警日志、Linux 启动记录、审计日志、kdump、vmcorevmcore-dmesg.txt、Oracle Clusterware 日志以及 Lenovo BMC/XCC 硬件事件综合分析,最终确认:

sydb2 服务器 CPU1/Socket1 处理器子系统发生不可纠正的 Machine Check Exception。Linux 内核检测到处理器上下文已经损坏后触发 Kernel Panic,kdump 保存 vmcore,随后系统自动重启。

Oracle 数据库、ASM、Clusterware 和 RAC 服务均为硬件故障发生后的被动中断对象。

重启后出现的 CSSD 网络心跳缺失、CRSD Policy Engine 无法初始化等问题,属于服务器多次异常复位及硬件不稳定背景下的次生故障现象。

1.2 系统环境
#

项目信息
系统名称XXX
数据库架构Oracle RAC 双节点
数据库版本Oracle Database 11.2.0.4
Grid InfrastructureOracle GI 11.2.0.4
故障节点sydb2 / infodb2
正常节点sydb1 / infodb1
操作系统CentOS Linux 7
内核版本3.10.0-1160.el7.x86_64
服务器型号Lenovo ThinkServer SR660 V2
BIOS 版本XWE108K-1.92
CPU 型号Intel Xeon Gold 5318N
CPU 架构双路、96 个逻辑 CPU
内存约 512GB
Oracle SGA约 248GB
公网接口ens9f0
私网接口ens9f3
节点 1 私网100.1.1.1/24
节点 2 私网100.1.1.2/24
OCR/VotingASM 磁盘组 +OCRVOTE

二、故障现象
#

2.1 节点在短时间内多次自动重启
#

通过 last -xwho -buptime -s 以及 /var/crash 目录核对,发现 sydb2 在不到 25 小时内至少发生 9 次异常重启。

序号内核异常及 vmcore 时间主机后续启动时间
12026-07-12 14:49:042026-07-12 14:51
22026-07-12 17:10:112026-07-12 17:12
32026-07-12 18:02:292026-07-12 18:04
42026-07-12 19:44:402026-07-12 19:46
52026-07-13 06:28:032026-07-13 06:30
62026-07-13 10:29:442026-07-13 10:31
72026-07-13 11:46:082026-07-13 11:48
82026-07-13 12:13:442026-07-13 12:15
92026-07-13 15:06:552026-07-13 15:08

每次 vmcore 生成后约两分钟,服务器完成重新启动,符合 kdump 保存内存转储后自动重启的特征。

2.2 Oracle 实例随主机重启反复启动
#

alert_infodb2.log 中发现 9 次:

Starting ORACLE instance (normal)

对应时间为:

2026-07-12 14:53:48
2026-07-12 17:16:10
2026-07-12 18:08:15
2026-07-12 19:50:34
2026-07-13 06:33:53
2026-07-13 10:35:36
2026-07-13 11:52:14
2026-07-13 12:19:36
2026-07-13 15:12:46

每次 Oracle 实例启动均发生在 Linux 主机启动后约 3~4 分钟。

实例启动前未发现对应的:

Shutting down instance
Database closed
Database dismounted
Instance shutdown complete

说明数据库进程不是通过正常关闭流程退出,而是随操作系统突然中断。

2.3 Linux 没有正常关机记录
#

Linux Audit 中存在连续的:

SYSTEM_BOOT

但在相应时间之前没有对应的:

SYSTEM_SHUTDOWN

同时未发现管理员执行以下命令的审计记录:

reboot
shutdown
poweroff
halt
init 6
systemctl reboot

现场表现为非正常系统中断,而不是人工重启或正常操作系统关机。

2.4 每次异常重启前均生成 vmcore
#

/var/crash 中存在 9 组完整的:

vmcore
vmcore-dmesg.txt

单个 vmcore 大小约为 1.9~2.2GB。

该现象说明系统经历了以下过程:

运行内核发生致命异常
Kernel Panic
进入 kdump crash kernel
保存 vmcore
系统自动重启

如果只是突然断电,通常无法连续完整保存多份约 2GB 的 vmcore。

2.5 vmcore 中出现明确的 CPU 致命错误
#

不同 vmcore-dmesg.txt 中反复出现两类硬件错误。

第一类为 CPU 直接上报的 Machine Check Exception:

CPU 38: Machine Check Exception: 5 Bank 0
Bank 0: f2000040000f040a

PROCESSOR 0:606a6
SOCKET 1
APIC 5c
microcode d0003d1

Machine check: Processor context corrupt
Kernel panic - not syncing: Fatal machine check

第二类为 BIOS/固件通过 APEI/GHES 上报:

Hardware error from APEI Generic Hardware Error Source

event severity: fatal
fru_text: Socket1
section_type: general processor error
error_type: 0x08
micro-architectural error
processor_id: 0x5c

Kernel panic - not syncing: Fatal hardware error!

多次事件均集中在:

Socket1
APIC 0x5c / 0x5d
Bank 0
micro-architectural error
Processor context corrupt

2.6 BMC/XCC 记录 CPU1 不可纠正错误
#

Lenovo BMC/XCC 的 System Event Log 中记录:

CPU1_Status
Critical
Configuration Error
System_MCERR
Critical
State Asserted
CPU1_Status
Critical
Machine Check Exception (Uncorrectable)

BMC 中的 CPU1_Status 与 Linux vmcore 中的 Socket1 完全对应。

2.7 重启后 Clusterware 无法完整恢复
#

主机启动日志显示操作系统、ASMLib、网络服务及 Oracle High Availability Services 能够启动。

但后续 Clusterware 曾出现:

Oracle High Availability Services is online
Cluster Synchronization Services is online
Cannot communicate with Cluster Ready Services
Cannot communicate with Event Manager

对应资源状态为:

ora.crsd   INTERMEDIATE
ora.evmd   INTERMEDIATE

另一次启动后,CSSD 也无法加入集群,导致 ASM、CRSD 和数据库资源全部保持 OFFLINE。

三、排查过程
#

3.1 从 Oracle 告警日志确认数据库不是重启源头
#

首先检查 infodb2 实例告警日志中的启动记录:

grep -n "Starting ORACLE instance" alert_infodb2.log

共发现 9 次实例启动。

继续检查是否存在正常关闭:

grep -nE \
"Shutting down instance|Instance shutdown complete|Database closed|Database dismounted|ALTER DATABASE CLOSE" \
alert_infodb2.log

结果显示,多次启动之前没有对应的正常关闭记录。

继续检索 Oracle 内部致命错误:

grep -nE \
"ORA-00600|ORA-07445|ORA-29740|ORA-29702|terminating instance|Instance terminated|PMON terminating|LGWR terminating" \
alert_infodb2.log

未发现能够解释整台服务器自动重启的 Oracle 内部错误。

告警日志中虽存在以下信息:

ORA-28545
ORA-02063
Fatal NI connect error 12170
Checkpoint not complete

但这些分别属于数据库链路、远端连接、网络连接超时及日志切换压力问题,无法触发 Linux 整机重启。

该阶段确认:

Oracle 实例是随主机异常中断的受影响对象,而不是导致操作系统重启的源头。

3.2 核对主机启动时间与 Oracle 启动时间
#

执行:

uptime -s
who -b
last -x | head -50

其中一次输出为:

uptime -s
2026-07-13 15:09:00

who -b
system boot  2026-07-13 15:08

last -x 显示:

reboot system boot  Mon Jul 13 15:08
reboot system boot  Mon Jul 13 12:15
reboot system boot  Mon Jul 13 11:48
reboot system boot  Mon Jul 13 10:31
reboot system boot  Mon Jul 13 06:30
reboot system boot  Sun Jul 12 19:46
reboot system boot  Sun Jul 12 18:04
reboot system boot  Sun Jul 12 17:12
reboot system boot  Sun Jul 12 14:51

将主机启动时间与 Oracle 启动时间比对后发现,两者逐一对应,Oracle 均在主机启动后约 3~4 分钟自动拉起。

因此不是 Oracle 进程反复崩溃后由 Clusterware 单独重启,而是整台主机反复重新启动。

3.3 检查 Linux 审计日志,排除人工重启
#

查询管理员命令:

ausearch -m USER_CMD \
  -ts 07/12/2026 14:00:00 \
  -te 07/13/2026 15:20:00 -i \
| egrep -i \
'reboot|shutdown|poweroff|halt|init 6|systemctl reboot|systemctl poweroff'

结果:

<no matches>

查询启动和关机事件:

ausearch -m SYSTEM_BOOT,SYSTEM_SHUTDOWN \
  -ts 07/12/2026 14:00:00 \
  -te 07/13/2026 15:20:00 -i

结果中存在多条:

type=SYSTEM_BOOT

但对应时间之前没有:

type=SYSTEM_SHUTDOWN

进一步检查 Oracle Clusterware Lastgasp:

ls -lah --full-time /etc/oracle/lastgasp
file /etc/oracle/lastgasp/*
strings /etc/oracle/lastgasp/* 2>/dev/null

结果显示文件时间仍为 2024 年,未留下本次故障时间的 Clusterware 主动重启记录。

该阶段排除了:

  • 常规人工 reboot;
  • 正常 systemd shutdown;
  • 有明确 Lastgasp 证据的 Clusterware 主动重启。

3.4 检查 kdump 状态和 vmcore
#

检查 kdump:

systemctl status kdump -l
kdumpctl status

输出显示:

kdump.service - Crash recovery kernel arming
Active: active (exited)

kexec: loaded kdump kernel
Starting kdump: [OK]

以及:

Kdump is operational

检查 ABRT:

abrt-cli list

其中一次记录为:

Directory:
/var/spool/abrt/vmcore-127.0.0.1-2026-07-13-15:06:55

检查 /var/crash

find /var/crash -maxdepth 3 -type f -ls

发现 9 组 vmcore,与 9 次系统重启逐一对应。

vmcore 时间下一次启动时间时间差
07-12 14:49:0407-12 14:51约 2 分钟
07-12 17:10:1107-12 17:12约 2 分钟
07-12 18:02:2907-12 18:04约 2 分钟
07-12 19:44:4007-12 19:46约 2 分钟
07-13 06:28:0307-13 06:30约 2 分钟
07-13 10:29:4407-13 10:31约 2 分钟
07-13 11:46:0807-13 11:48约 2 分钟
07-13 12:13:4407-13 12:15约 2 分钟
07-13 15:06:5507-13 15:08约 2 分钟

时间关系证明每次都是生产内核先崩溃,kdump 保存现场后主机才重新启动。

3.5 分析 vmcore-dmesg.txt
#

以最新一次 vmcore 为例:

F=/var/crash/127.0.0.1-2026-07-13-15:06:55/vmcore-dmesg.txt

grep -nEi -B30 -A120 \
'Kernel panic|not syncing|Machine Check|MCE|Hardware Error|APEI|GHES|Socket1|Processor context corrupt|Fatal' \
"$F"

输出中明确出现:

event severity: fatal
fru_text: Socket1
section_type: general processor error
error_type: 0x08
micro-architectural error
processor_id: 0x5c
Kernel panic - not syncing: Fatal hardware error!

对全部 vmcore 进行批量检查:

for f in /var/crash/*/vmcore-dmesg.txt
do
    echo "===== $f ====="

    grep -nEi \
    'Kernel panic|Machine Check|MCE|Hardware Error|APEI|GHES|Socket1|Processor context corrupt|Fatal' \
    "$f" | tail -100
done

多份 vmcore 中重复出现:

CPU 38
Bank 0
Socket1
APIC 0x5c 或 0x5d
CPUID 0x606a6
microcode 0xd0003d1
Processor context corrupt
Fatal machine check

部分转储中 RIP 位于:

huge_pmd_share
huge_pte_alloc

但同时被标记为:

RIP !INEXACT!

这表示 Machine Check 可能异步上报,RIP 只是错误被检测到时正在执行的代码位置,不能据此判断 HugePages 是根因。

真正跨多次事件稳定重复的是:

Socket1
Bank 0
APIC 0x5c / 0x5d
micro-architectural error
Processor context corrupt

3.6 使用 BMC/XCC 进行硬件侧交叉验证
#

检查 Lenovo BMC/XCC System Event Log,发现:

CPU1_Status
Critical
Configuration Error
System_MCERR
Critical
State Asserted
CPU1_Status
Critical
Machine Check Exception (Uncorrectable)

BMC 记录中的 CPU1 与 Linux 中的 Socket1 相互对应。

因此形成以下证据闭环:

BMC/XCC
CPU1 Machine Check Exception (Uncorrectable)
Linux vmcore
Socket1 / APIC 0x5c、0x5d / Bank 0
Processor context corrupt
Kernel panic
kdump 保存 vmcore
系统自动重启

3.7 核对重启后的 Clusterware 状态
#

主机重启后执行:

export GRID_HOME=/u01/app/11.2.0/grid
export PATH=$GRID_HOME/bin:$PATH

crsctl check crs
crsctl stat res -t -init

曾出现:

CRS-4638: Oracle High Availability Services is online
CRS-4535: Cannot communicate with Cluster Ready Services
CRS-4529: Cluster Synchronization Services is online
CRS-4534: Cannot communicate with Event Manager

对应资源状态:

ora.asm    ONLINE
ora.cssd   ONLINE
ora.ctssd  ONLINE
ora.crsd   INTERMEDIATE
ora.evmd   INTERMEDIATE

进程虽存在:

ps -ef | egrep \
'ohasd.bin|ocssd.bin|octssd.bin|asm_pmon_\+ASM2|crsd.bin|evmd.bin' \
| grep -v grep

crsd.bin 长时间无法完成初始化。

检查 CRSD 日志:

tail -300 \
/u01/app/11.2.0/grid/log/sydb2/crsd/crsd.log

关键输出:

Initializing OCR

proprioo: for disk 0 (+OCRVOTE)
id match (1)
need recover (0)

Master host name [sydb1]
Attempting to connect to master at address [sydb1:...]

gipcretKeyNotFound
Policy Engine is not initialized yet!

说明:

  • 本地 OCRVOTE 可以读取;
  • OCR 不需要恢复;
  • CRSD 在连接节点 1 OCR Master 时未能完成 GIPC 初始化;
  • Policy Engine 长时间保持未初始化状态。

3.8 检查 CSSD 网络心跳异常
#

后续一次启动时,CSSD 无法加入现有集群。

检查:

egrep -in \
'has a disk HB|no network HB|Local Join|sending join|takeover aborted' \
/u01/app/11.2.0/grid/log/sydb2/cssd/ocssd.log \
| tail -500

反复出现:

node 1, sydb1, has a disk HB, but no network HB

同时:

Node sydb1, number 1, is in an existing cluster with disk state 3
takeover aborted due to cluster member node found on disk
sending join msg to all nodes

这说明 sydb2 可以正常读取 sydb1 写入 Voting Disk 的磁盘心跳,但当时未能建立 CSS 网络心跳。

3.9 对私网、防火墙和网卡进行验证
#

节点 2 的私网配置:

ip addr show ens9f3
ip route show
ip route get 100.1.1.1 from 100.1.1.2
ip neigh show dev ens9f3

结果:

ens9f3 UP
100.1.1.2/24

100.1.1.0/24 dev ens9f3
src 100.1.1.2

100.1.1.1 dev ens9f3

100.1.1.1
lladdr d4:04:e6:0f:27:97
REACHABLE

节点 1 的 Oracle 私网定义:

oifcfg getif

结果:

ens9f0  138.20.1.0  global  public
ens9f3  100.1.1.0   global  cluster_interconnect

双向 Ping 正常:

0% packet loss
延迟约 0.2~0.3ms

ARP 正常:

Unicast reply from 100.1.1.1
[D4:04:E6:0F:27:97]

检查防火墙:

systemctl is-active firewalld
systemctl is-enabled firewalld

结果:

unknown
disabled

检查 iptables:

iptables -L -n -v
iptables -t raw -L -n -v
iptables -t mangle -L -n -v

结果均为:

policy ACCEPT

无 DROP 或 REJECT 规则。

检查网卡:

ethtool -S ens9f3 | egrep -i \
'error|drop|miss|crc|frame|fifo|timeout|reset|fault|buffer'

结果:

rx_fcs_errors: 0
rx_align_errors: 0
rx_frame_too_long_errors: 0
rx_in_length_errors: 0
rx_out_length_errors: 0
tx_mac_errors: 0
tx_carrier_sense_errors: 0
tx_errors: 0
rx_errors: 0

检查 UDP:

nstat -az | egrep -i \
'Udp|InErrors|RcvbufErrors|SndbufErrors|InCsumErrors'

关键结果:

UdpInDatagrams       107982
UdpOutDatagrams       50805
UdpInErrors               0
UdpRcvbufErrors           0
UdpSndbufErrors           0
UdpInCsumErrors           0

因此检查时点未发现:

  • 防火墙阻断;
  • 持续性二层或三层网络中断;
  • 网卡 CRC 或物理层错误;
  • UDP 缓冲区溢出;
  • UDP 校验错误;
  • 私网 IP 或路由错误。

CSSD 日志中的网络心跳缺失是真实发生的,但现有检查无法证明存在持续性的网络设备故障。

结合服务器已经确认的 CPU1/Socket1 不可纠正硬件错误,更合理的判断是:

CSSD、GIPC 和 CRSD 初始化异常属于主机硬件不稳定、多次 Kernel Panic 和异常复位后的次生表现。

四、根因结论
#

4.1 主根因
#

本次故障的主根因为:

sydb2 服务器 CPU1/Socket1 处理器子系统存在不可纠正硬件故障。

主要证据包括:

Machine Check Exception
Machine Check Exception (Uncorrectable)
System_MCERR
Socket1
CPU1
APIC 0x5c / 0x5d
Bank 0
micro-architectural error
Processor context corrupt
Fatal machine check
Fatal hardware error

4.2 故障机制
#

完整故障过程为:

CPU1/Socket1 发生不可纠正硬件错误
CPU MCE 或 BIOS APEI/GHES 上报错误
Linux 判断 Processor context corrupt
Kernel panic - Fatal machine check
kdump 保存 vmcore
服务器自动重启
Oracle Clusterware、ASM 和数据库实例被动中断
部分启动过程中出现 CSSD/GIPC/CRSD 初始化异常

4.3 根因判断边界
#

现有证据能够明确证明 CPU1/Socket1 是主机反复重启的根因。

CSSD 日志中的:

has a disk HB, but no network HB

说明当时 Clusterware 网络心跳确实没有建立,但后续检查未发现持续性私网、防火墙、网卡或 UDP 协议栈异常。

因此,本报告不将网络问题列为本次事故的主根因,而将其归类为硬件不稳定及多次异常复位后的次生故障现象。

五、影响范围及处置建议
#

5.1 影响范围
#

本次故障造成以下影响:

  1. sydb2 节点多次非计划退出。
  2. infodb2 数据库实例多次突然中断。
  3. RAC 服务发生漂移,客户端连接可能出现短时间中断。
  4. Clusterware 资源曾长时间处于 OFFLINEINTERMEDIATE
  5. 节点重启后 CSSD、ASM、CRSD 无法稳定恢复。
  6. 多次 Kernel Panic 增加文件系统、Clusterware 本地状态及数据库恢复风险。
  7. 在硬件修复前,节点仍存在随时再次重启的风险。

5.2 立即处置建议
#

确认 sydb1 上数据库和业务服务正常:

crsctl stat res -t
srvctl status database -d infodb
srvctl status service -d infodb

停止并禁用节点 2 数据库实例:

srvctl stop instance \
  -d infodb \
  -i infodb2 \
  -o immediate

srvctl disable instance \
  -d infodb \
  -i infodb2

sydb2 停止并禁用 Clusterware:

crsctl stop crs -f
crsctl disable crs

硬件未修复前,不应再让 sydb2 承载生产数据库实例。

5.3 保留故障现场
#

保留以下材料:

/var/crash/*/vmcore
/var/crash/*/vmcore-dmesg.txt
Oracle alert_infodb2.log
Grid Infrastructure 日志
Linux audit 日志
/var/log/messages*
BMC/XCC System Event Log
XCC FFDC

由于 ABRT 存在容量限制,可能自动清理旧 vmcore,应及时备份:

mkdir -p /backup/sydb2_vmcore
cp -a /var/crash/* /backup/sydb2_vmcore/

5.4 硬件处置建议
#

向 Lenovo 提交硬件工单,要求重点检查:

  • Socket1/CPU1;
  • CPU 插槽;
  • 主板;
  • CPU 供电模块;
  • CPU 散热系统;
  • BIOS/UEFI;
  • XCC/BMC;
  • CPLD;
  • CPU microcode;
  • CPU 与主板之间的信号链路。

工单中应提供以下关键词:

CPU1 Machine Check Exception (Uncorrectable)
System_MCERR
Socket1
APIC 0x5c / 0x5d
Bank 0
Processor context corrupt
Fatal machine check

优先由 Lenovo 根据 XCC FFDC、SEL 和硬件诊断结果决定更换:

Socket1 CPU
系统主板

5.5 修复后的验证要求
#

硬件维修或更换完成后,应进行以下验证:

  1. 导出并保留维修前 BMC SEL 和 FFDC。
  2. 运行 CPU、内存及主板硬件诊断。
  3. 检查是否仍出现 MCE、APEI、GHES 或 MCERR。
  4. 进行至少 24~72 小时 CPU 和内存压力测试。
  5. 检查 /var/crash 是否新增 vmcore。
  6. 启动 Clusterware,验证 CSSD 双节点成员关系。
  7. 验证两节点私网和 HAIP。
  8. 验证 Voting Disk 和 OCR。
  9. 验证 ASM 磁盘组。
  10. 验证数据库实例启动和 RAC 服务漂移。
  11. 稳定观察后再恢复生产承载。

六、最终结论
#

本次故障通过多层日志形成完整证据链:

Oracle 告警日志
确认数据库实例突然中断,无正常关闭记录
Linux 启动记录
确认主机在短时间内多次重新启动
Linux 审计日志
排除人工 reboot 和正常 shutdown
kdump 和 vmcore
确认每次重启前均发生 Kernel Panic
vmcore-dmesg
确认 Socket1/CPU1 Fatal Machine Check
Lenovo BMC/XCC
确认 CPU1 Machine Check Exception (Uncorrectable)

最终定性为:

Oracle RAC 节点 sydb2 多次异常重启,是由 Lenovo 服务器 CPU1/Socket1 处理器子系统不可纠正硬件错误引起。Linux 内核检测到处理器上下文损坏后触发 Kernel Panic,kdump 保存转储并自动重启。Oracle RAC、ASM、Clusterware 和数据库实例均为被动中断。

重启后出现的 CSSD 网络心跳缺失、GIPC 连接失败和 CRSD Policy Engine 无法初始化,属于服务器持续硬件不稳定及多次异常复位后的次生故障表现,不应作为本次事故的首要根因。

在 CPU1/Socket1 相关硬件完成维修、更换并通过稳定性测试之前,sydb2 不应重新承载生产业务。