oracle rac启动卡住三大真因:ocr/voting disk i/o延迟过高、ohasd.bin被systemd超时终止、资源锁残留未释放;需依次检查ocrcheck耗时、systemctl status ohasd输出及crsctl stat res状态,并结合日志与设备诊断。

Oracle RAC 启动卡住不是随机现象,而是某一层依赖明确失败或超时——最常见真因就三个:OCR/Voting Disk 磁盘 I/O 延迟过高、ohasd.bin 被 systemd 杀掉、资源锁残留未释放。先别重启,直接查日志和设备。
OCR 或 Voting Disk 读取慢导致卡在 CRS-4124 / CRS-2672
OCR 不是普通文件,它是集群启动的“心跳数据库”,哪怕单次读取延迟超过阈值,crsd.bin 就会卡死在 CRS-4124 或 CRS-2672 阶段。关键判断依据:ocrcheck 耗时 >30 秒,或 crsctl query css votedisk 卡住。
- 先定位设备路径:
ocrconfig -showbackup或crsctl query css votedisk查出 OCR/Voting Disk 所在设备(如/dev/mapper/mpathb) - 测真实物理读速:
dd if=/dev/mapper/mpathb of=/dev/null bs=1M count=1024 iflag=direct status=progress—— 理想值 ≥80MB/s(SATA SSD),低于 30MB/s 即危险 - 看 I/O 响应积压:
iostat -x 1观察r_await > 50ms或%util ≈ 100%,说明底层存储已饱和 - 高频但易忽略的根因:
udev规则漏设OWNER="grid"导致权限拒绝;多路径未启用或策略错配(如 round-robin 指向断链路径);ASM 冗余模式误设为 NORMAL(OCR 必须用 EXTERNAL)
ohasd.bin 启动失败或被 systemd 强制终止
RHEL 7+ 上,ohasd.bin 启动慢于默认 TimeoutStartSec=90 就会被 systemd 杀掉,尤其在 12c/19c GI 初始化 GPnP wallet、HAIP、OCR 校验等环节容易超时。现象是 ps -ef | grep ohasd 看不到进程,systemctl status ohasd 显示 timeout 或 start-limit-hit。
- 确认是否被杀:
systemctl status ohasd查输出里是否有timeout或status=203;再翻$GRID_HOME/log/<hostname>/ohasd/ohasd.log</hostname>末尾是否停在CLSU-00100无后续 - 改 systemd 配置:编辑
/usr/lib/systemd/system/ohasd.service,在[Service]段加两行:TimeoutStartSec=300和RestartSec=30,然后执行systemctl daemon-reload && systemctl restart ohasd - 别信
systemctl status oracle-ohasd—— 它不反映真实状态;真正要看的是crsctl check has是否返回CRS-4638: Oracle High Availability Services is online
资源锁残留导致 crsctl start resource 卡在 CRS-2672
crsctl start resource 卡在 CRS-2672,大概率不是配置错,而是上一次异常退出没释放分布式锁。锁信息散落在 OCR、内存和本地 cache 三层,只删进程或硬 kill 会让问题更乱。
- 先确认状态:
crsctl stat res -t | grep -E "(OFFLINE|UNKNOWN)",看目标资源是否长期处于INIT或INTERMEDIATE状态 - 查锁持有者:
crsctl debug log res "resource:5"开启调试日志,重试启动后去ADRBASE/diag/crs/<nodename>/crs/trace/crsd.trc</nodename>搜lock holder或wait for lock - 软停必须干净:
crsctl stop resource <name> -f</name>后,立刻ps -ef | grep <name></name>确认无残留进程(尤其注意 Z 状态) - 依赖链要全停:
crsctl stat res <name> -p | grep REQUIRED_RESOURCES</name>,确保它依赖的 VIP、监听器、ASM 实例都已下线;再进sqlplus / as sysasm确认无 ASM 客户端连接
临时绕过 OCR/投票盘启动仅限应急
业务急需恢复且确认磁盘层无硬件故障时,可用独占模式跳过 OCR 和仲裁校验,但这是单节点临时救急手段,不能长期运行,也不能替代根因修复。
- 强制本地启动:
crsctl stop crs -f && crsctl start crs -excl -nocrs(注意参数顺序:-excl必须在前) - 该命令让当前节点以独占模式拉起
ohasd和cssd,不读 OCR、不连其他节点,crsctl query css votedisk会显示 0 个投票盘 - 启动后立刻执行
ocrconfig -restore从最近备份恢复 OCR,或用ocrconfig -import导入导出文件,否则下次正常启动仍会卡住 - 真正棘手的是 OCR 设备本身健康,但
udev规则错配 + SELinux 拒绝访问,导致每次ocrcheck都静默卡 15 秒以上——这种问题不会报错,只会拖慢整个流程











