Oracle 11g RAC启动失败主因是$GRID_HOME/bin/oracle权限错误:必须chown grid:oinstall并chmod 6751(即rwsr-s--x),因其需suid/sgid特权访问ASM设备;rootcrs.pl -init不修复该文件,须手动修正后crsctl stop crs -f再start crs。
oracle 11g rac 启动失败,只要看到 crs-4639、ora-01078 或 prcr-1071 这类错误,且 crsctl check crs 返回“cannot communicate with the crs daemon”,大概率是 grid 用户下关键二进制文件权限被破坏,而不是磁盘空间或参数配置问题。
为什么 oracle 和 grid 的 oracle 文件必须带 suid 和 sgid
这两个文件($GRID_HOME/bin/oracle 和 $ORACLE_HOME/bin/oracle)不是普通可执行程序,而是 Oracle 集群启动时由 oraagent 调用的特权入口。它们需要以 root 身份访问 ASM 设备、修改内核信号量、绑定高权限端口等操作。权限缺失会导致:
• cssd 和 crsd 启动卡在 STARTING
• asm 实例无法挂载磁盘组(报 ORA-15001: diskgroup does not exist or is not mounted)
• 即使 grid 用户属于 asmadmin 组也无效——因为进程实际运行身份仍是 grid,没权限提升就拿不到设备句柄
chmod 6751 不够,必须同时修正属主和属组
仅改权限不解决根本问题。正确做法是分两步执行(两个节点都要做):
-
chown grid:oinstall $GRID_HOME/bin/oracle(注意:11.2.0.x 中grid用户默认属组是oinstall,不是asmadmin) -
chmod 6751 $GRID_HOME/bin/oracle(即-rwsr-s--x) - 验证:
ls -l $GRID_HOME/bin/oracle输出应含rwsr-s--x,且第3/4字段为grid oinstall
如果属组错成 asmadmin,setasmgidwrap 会失效;如果属主不是 grid,oraagent 会拒绝调用该二进制。
别依赖 rootcrs.pl -init 自动修复
这个脚本在 11.2.0.3.6+ 版本中存在,但它只修复 Oracle 认为“关键”的少数文件(比如 ohasd、crsctl),不会碰 $GRID_HOME/bin/oracle。实测中常见情况是:
• 执行 ./rootcrs.pl -init 后 crsctl check crs 仍报 CRS-4639
• ps -ef | grep ohasd 显示进程存在但无子进程(说明 oraagent 启动失败)
• 此时必须手动检查并修复 oracle 文件权限与属主
修复后必须重启整个 CRS 栈,不能只启单个服务
权限修复只是前提,后续步骤缺一不可:
- 先停掉所有 CRS 进程:
crsctl stop crs -f(在每个节点执行) - 确认无残留进程:
ps -ef | grep -E "(ohasd|crsd|cssd)"应为空 - 再启动:
crsctl start crs - 验证:
crsctl check crs必须返回 “CRS-4638: Oracle High Availability Services is online”
跳过强制停止直接 srvctl start database 会失败——因为底层 crsd 已处于僵死状态,无法响应资源调度请求。


















