root.sh报“无法分配目录权限”是因为其校验机制严格匹配/u01/app/oracle下所有目录属主、属组及权限,如cfgtoollogs子目录未递归设为775、残留.non-oracle文件或SELinux上下文异常,均会导致静默失败或模糊报错。
为什么root.sh执行后仍报“无法分配目录权限”
这不是脚本没运行,而是root.sh在检查阶段就拒绝继续——它会校验/u01/app/oracle及其子目录的属主、属组、权限三者是否严格匹配预设规则。哪怕只差一个chmod 755没递归到cfgtoollogs子目录,它就会中断并输出模糊错误(如“permission denied while creating directory”或直接静默失败)。
root.sh运行前必须手工清理的4类残留
安装中断或重试后,/u01/app/oracle/product/19c/dbhome_1下常残留干扰项,导致root.sh拒绝接管:
-
.oracle隐藏目录:必须rm -rf /u01/app/oracle/product/19c/dbhome_1/.oracle -
installActions*.log和cfgtoollogs:即使为空目录也要删掉,root.sh会校验其存在性 - 非oracle用户创建的临时文件:
find /u01/app/oracle/product/19c/dbhome_1 -not -user oracle -delete - SELinux上下文异常:
restorecon -Rv /u01/app/oracle(仅Oracle Linux/RHEL)
权限修复必须分两步走,不能只靠chown -R
root.sh对目录和文件的权限要求不同,混用chmod -R 775反而触发校验失败:
- 目录必须是
775:find /u01/app/oracle -type d -exec chmod 775 {} \; - 普通文件必须是
664:find /u01/app/oracle -type f -exec chmod 664 {} \; - 可执行文件(如
$ORACLE_HOME/bin/oracle)例外,需单独设为6751:chmod 6751 /u01/app/oracle/product/19c/dbhome_1/bin/oracle
执行root.sh时最易忽略的环境变量
在root用户下直接运行/u01/app/oracle/product/19c/dbhome_1/root.sh前,必须确认:
-
ORACLE_HOME未被设置(否则脚本可能误读路径) -
PATH里不含其他Oracle Home的bin目录(避免调用错版本oraenv) - 当前shell是bash(某些系统默认csh会导致
root.sh语法解析失败) - 执行后检查
/u01/app/oracle/product/19c/dbhome_1/install/root__.log末尾是否有"Successfully setup Oracle Home"字样——这是唯一可信的成功信号
真正卡住的地方往往不是命令没敲,而是root.sh在后台默默比对了27个路径的权限、属主、SELinux上下文、甚至文件创建时间戳。任何一项不满足硬编码规则,它就停在那里,连错误提示都懒得给全。











