Oracle 19c RAC 集群安装过程中,权限检测不通过往往让管理员误以为是用户组配置错误或密码输入有误,但这些只是表象。真正的原因在于 Oracle 安装器在后台严格审查三项硬性规则:路径归属、环境变量隔离、文件系统权限。只要其中任何一环未对齐,root.sh 或 gridsetup.sh 就会报出模糊的 "permission denied" 错误,甚至直接静默退出,令人一头雾水。

grid 和 oracle 用户的 $ORACLE_HOME 必须独立,禁止嵌套或共用
这是最常见的错误配置之一。安装器会反复检查路径结构,一旦发现 $ORACLE_HOME 是 $GRID_HOME 的子目录——例如 /u01/app/19.3.0/grid/dbhome_1 这种形式——会立即中止,毫无商量余地。
$GRID_HOME必须是独立路径,例如/u01/app/19.3.0/grid,属主必须为grid:oinstall$ORACLE_HOME必须是另一条独立路径,例如/u01/app/oracle/product/19c/dbhome_1,属主必须为oracle:oinstall- 特别注意:两个路径不能存在父子关系,像
/u01/app/grid和/u01/app/grid/dbhome_1这种组合绝对禁止 - 验证方法很简单:
ls -ld $GRID_HOME $ORACLE_HOME,确认输出中用户/组名完全匹配,且没有软链接偷偷指向对方的目录
环境变量必须严格分隔,PATH 和 ORACLE_BASE 不能交叉污染
安装器在后台会逐个比对每个用户的 shell 环境。即使 grid 用户的 PATH 里不小心混入了 oracle 的 $ORACLE_HOME/bin,也足以导致 root.sh 校验失败。
grid用户执行:echo $PATH | grep -v "dbhome",确保其中没有任何oracle用户的 bin 路径oracle用户执行:echo $ORACLE_BASE,必须是独立路径(例如/u01/app/oracle),绝不能是/u01/app/19.3.0/grid或其子路径- 每个用户的
.bash_profile要单独维护:grid只设GRID_HOME和ORACLE_BASE(可以和oracle共用同一个ORACLE_BASE);oracle只设自己的ORACLE_HOME和相同的ORACLE_BASE ORACLE_BASE可以相同,但必须是真实存在的目录,不能是软链接到对方 home 下的
root.sh 执行前必须清理 grid 用户残留文件
root.sh 并非简单修改权限就完事。它会扫描 $GRID_HOME 下 27 个以上的固定路径节点,逐一校验属主、权限、SELinux 上下文,甚至连文件创建时间戳都不放过。只要有一处不匹配,就立刻中断。
- 手动清理四类残留文件:
.oracle隐藏目录、installActions*.log、cfgtoollogs(即使里面是空的)、以及非grid用户创建的临时文件 - 特别提醒:
cfgtoollogs目录权限必须是775,不是755;.oracle必须由grid创建且属主正确 - 建议在重跑之前执行:
rm -rf $GRID_HOME/.oracle $GRID_HOME/installActions*.log $GRID_HOME/cfgtoollogs,然后重新解压 GI 介质
CVU 报 PRVG-11250 别当错误处理
这个提示看上去吓人,但它并非权限问题。它是 CVU 主动跳过了需要 root 权限的检查项,比如 RPM 数据库完整性校验。它出现在日志中,但不影响安装流程。
- 看到
INFORMATION PRVG-11250就放心跳过,无需因此切 root 去跑整个runcluvfy.sh - 如果想消除这个提示,可以在命令末尾加
-method root,但仅限于调试场景,生产环境不推荐如此操作 - 真正需要盯紧的是
PRVF-7532、PRVE-0405、INS-40915这类带 ERROR 关键字的条目
这里最容易被忽略的一点是:路径隔离和环境变量污染这两项,在安装日志中往往不会直接报错,而是表现为静默退出,或者 root.sh 跑到一半忽然中断,只留下一句 "permission denied"。因此,必须逐节点、逐用户、逐路径地人工验证,千万不能依赖自动同步或想当然地假设所有节点配置一致。
