不能。rootcrs.sh -init仅重置GRID_HOME下关键路径权限,不处理log/install/utl等目录、ACL及setuid/setgid位,执行后仍需手动补chmod 6751 oracle、chown grid:oinstall crs/utl、chmod 755 utl/*及setasmgidwrap 4755权限。
rootcrs.sh -init 能不能直接修复全部权限?
不能。rootcrs.sh -init 只重置 $grid_home 下 oracle 认为“关键路径”的文件和目录权限,比如 bin/、lib/、crs/ 等子目录,但不会处理 log/、install/、utl/ 下的脚本或自定义配置文件,更不会恢复 acl 或 setuid/setgid 位。实测中,执行后 oraagent_oracle 仍因权限不足无法 spawn,crsd.trc 持续报 crs-5828: could not start agent,就是典型未覆盖区域。
执行 rootcrs.sh -init 前必须停掉 CRS 吗?
必须。该脚本会强制清空 $GRID_HOME/crs/log 和部分运行时状态,若 CRS 正在运行,会出现以下现象:
-
CRS-4640: CRS is already running错误并退出 - 部分目录权限被写入一半就中断,导致比原始问题更混乱
-
crsctl check crs显示正常,但资源实际无法启动(伪成功)
正确操作顺序:crsctl stop crs -f → 确认 ps -ef | grep d.bin 无残留 → 再以 root 用户执行 /u01/app/19.3.0/grid/crs/install/rootcrs.sh -init。
执行完 rootcrs.sh -init 还要手动补哪些权限?
至少补这三类,否则 oraagent_oracle、orarootagent、ASM 实例仍会失败:
-
chmod 6751 /u01/app/19.3.0/grid/bin/oracle(setuid + exec) -
chown grid:oinstall /u01/app/19.3.0/grid/crs/utl(该目录下crsconfig_dirs和crsconfig_fileperms必须属主正确) -
chmod 755 /u01/app/19.3.0/grid/crs/utl/*(确保 perl 脚本能执行)
特别注意:19c 中 rootcrs.sh 不再自动修复 setasmgidwrap 权限,如果 ASM 启动卡在 STARTING,大概率是 /u01/app/19.3.0/grid/bin/setasmgidwrap 缺少 4755。
为什么 getfacl/setfacl 方案在双节点都出问题时走不通?
因为 getfacl -R /u01/app 备份的是当前节点的权限快照——如果两个节点都被 chmod -R 777 或 chown -R root:root 过,备份出来的 .txt 文件里记录的就是错误权限。直接 setfacl --restore= 相当于把错的再刷一遍。真正能用的前提只有一个:至少一个节点未被改动过。此时必须从那个节点拉取权限,并严格替换主机名、ASM 实例名、DB 名等字符串,否则 oraagent 会因路径不匹配拒绝加载。


















