根本原因是ohasd进程未启动,导致crs框架静默失效;需先验证ps -ef | grep ohasd,检查/etc/oracle/olr.loc路径有效性及权限,再执行crsctl start ohasd并用crsctl check crs确认crs-4638。

Oracle 19c RAC开机后CRS服务无法自启动,**根本原因不是crsctl没执行,而是ohasd进程压根没起来**——所有后续资源(cssd、crsd、evmd)都依赖它,它挂了,整个集群框架就静默失效。
crsctl check crs 报 CRS-4537:ohasd 没运行
这个错误是第一信号。它不表示 CRS 资源启不动,而是本地 ohasd 进程根本不存在或通信失败。
- 立刻执行
ps -ef | grep ohasd:若无输出,说明ohasd未启动,此时执行crsctl start crs无效 - 检查
/etc/oracle/olr.loc是否存在且路径有效:cat /etc/oracle/olr.loc,内容必须指向真实存在的 OCR 文件(如olrconfig_loc=/u01/app/19c/grid/cdata/olr.ocr) - 确认该路径权限正确:目录属主为
root:root,OCR 文件权限应为644;若为600或路径不存在,ohasd启动会静默失败 - 手动拉起:
sudo /u01/app/19c/grid/bin/crsctl start ohasd,之后必须立即验证crsctl check crs输出含CRS-4638
CRS 自启动开关被禁用
即使 ohasd 正常,CRS 也可能不会随系统启动——这是两个独立开关。
- 检查自启动状态:
crsctl config crs,输出CRS-4622表示已启用,CRS-4621表示已禁用 - 对应控制文件是
/etc/oracle/scls_scr/<hostname>/root/ohasdstr</hostname>,内容为enable或disable - 启用命令:
crsctl enable crs(需 root 权限),执行后该文件自动变为enable - 注意:该设置只作用于当前节点,多节点集群必须在每个节点上单独执行
systemd 的 RemoveIPC=yes 清空 IPC 导致 ohasd 启动失败
这是最容易被忽略的 OS 层陷阱。RHEL/CentOS 7+ 默认开启此行为,只要 grid 用户最后一次登录退出,systemd-logind 就会清空其创建的所有 sem/shm,而 ohasd 初始化时依赖这些 IPC 资源。
- 验证:
grep RemoveIPC /etc/systemd/logind.conf,若为RemoveIPC=yes,必须改掉 - 修复:
sed -i 's/RemoveIPC=yes/RemoveIPC=no/' /etc/systemd/logind.conf,然后systemctl restart systemd-logind - 该设置必须在所有节点统一生效,否则一个节点清空、其他节点还在用,集群心跳直接中断
- 顺带检查
DefaultTasksMax:若为默认值(如 512),ohasdfork 子进程会失败;应设为infinity并systemctl daemon-reload
OCR/voting disk 不可达导致 cssd 启动卡死
ohasd 起来后,cssd 是第一个关键子进程。它不依赖数据库,但强依赖 OCR 和 voting disk 的磁盘组是否可访问、MOUNTED、权限一致。
- 检查 ASM 磁盘组状态:
asmcmd lsdg,确认 OCR 所在磁盘组(如OCRVOTE)状态为MOUNTED,不是DISMOUNTED - 若为
DISMOUNTED,先以/ as sysasm登录 ASM 实例执行:ALTER DISKGROUP OCRVOTE MOUNT - 确认 voting disk 路径可读:
crsctl query css votedisk,输出路径(如+OCRVOTE或/dev/mapper/mpathb)必须在所有节点上能被root用户读取,且属主为grid:oinstall、权限为660(裸设备)或644(NFS) - 私网连通性异常也会阻塞
cssd:运行olsnodes -n,若某节点缺失,查$GRID_HOME/log/<hostname>/cssd/ocssd.log</hostname>中是否有IPC Send timeout或Failed to connect to CSS daemon
真正棘手的点往往不在 CRS 配置本身,而在操作系统级 IPC 策略、OCR 底层存储可达性、以及多节点间配置一致性——这三个层面任何一个出问题,都会让 crsctl start crs 看似成功,实则卡在某个子进程不动,日志里也只报超时或无响应。











