chown在Oracle安装中失败主因是权限校验机制拦截,非命令错误;需检查NFS挂载(root_squash)和SELinux状态(enforcing模式会静默拒绝),修复须先chown统一归属再setfacl全量还原ACL,关键文件权限(如6751、664、775)必须精确匹配。
chown 在 oracle 安装中失败,不是命令写错了,而是权限校验机制在拦你——直接硬改归属或权限大概率让 crs 启不动。
chown -R 失效但没报错?先查挂载点和 SELinux
常见现象是执行 chown -R oracle:oinstall /backup/sid/datafile 后 ls -l 仍显示 root:root,且无错误输出。这不是命令失效,而是系统拒绝了变更:
- 检查该目录是否挂载自 NFS:运行
mount | grep backup,若看到nfs或nfs4,默认配置下 NFS 服务端启用了root_squash,会把 root 的操作降权,chown就静默丢弃 - 确认 SELinux 是否启用:
/usr/sbin/sestatus -v;若为enabled且模式是enforcing,它会拦截对某些路径的 ownership 修改,哪怕你是 root - 临时验证:执行
setenforce 0再试chown,如果成功,说明 SELinux 是真凶;恢复时用setenforce 1,长期方案是调整策略而非关禁令
Oracle RAC 下误跑 chown -R /u01/app/oracle 怎么救?别碰 rootcrs.sh --init
一旦对 /u01/app/oracle 或 $GRID_HOME 执行了递归 chown/chmod,crsctl start crs 会卡在 CRS-4640 或直接报 CRS-2101——这不是服务起不来,是底层校验直接拒载。此时:
- 绝对不要在单节点出问题时,在另一节点上跑
rootcrs.sh --init:它只重置 CRS 核心组件权限,不修 DB HOME 下的bin/lib,反而可能引入不一致 - 优先从正常节点导出 ACL:
getfacl -R /u01/app/oracle > /tmp/oracle_acl_good.txt,注意输出里若有主机名或 SID(如rac1),必须用sed -i 's/rac1/rac2/g'替换,否则setfacl --restore会静默失败 -
setfacl --restore不改 owner/group,所以得先跑一遍chown -R oracle:oinstall /u01/app/oracle拉归属,再setfacl --restore补权限位和 ACL
关键文件权限必须精确到每一位:6751、664、775 不可妥协
Oracle 对权限位极其敏感,不是“能读能写能执行”就行,而是每个位置都参与启动校验:
-
$GRID_HOME/bin/oracle和$ORACLE_HOME/bin/oracle必须是-rwsr-s--x(即八进制6751):setuid + setgid + 执行位缺一不可;chmod 6751要单独执行,不能靠chmod -R带过去 - 普通文件(如
oraagent.bin)权限应为664(-rw-rw-r--),不是644;目录必须是775(drwxrwxr-x),755或777都会导致 CRS 初始化失败 - 验证方式不是只看
ls -l,要结合getfacl看是否残留非预期 ACL 条目,尤其注意default:开头的条目是否污染子目录
为什么 getfacl/setfacl 是唯一稳解?因为 Oracle 不只认 owner/group
Oracle 启动时校验的远不止归属,还包括:每个文件的 exact mode bit、setuid/setgid/sticky 位、扩展属性(如 security.selinux)、ACL 条目(包括 default ACL)。单纯 chown -R 或 chmod -R 只动其中一维,其余维度错位照样崩。
真正可靠的恢复动作只有两个:先用 chown -R 统一归属,再用 setfacl --restore 全量还原原始权限快照——这要求你早在安装完成、集群稳定后,就该在所有节点上跑一次 getfacl -R 备份。没备份?下次部署前,把它加进 checklist。











