ins-20801 是底层子任务(如 netca、dbca)静默崩溃后主安装器抛出的兜底错误码,根本原因常为 /etc/hosts 配置错误、缺失依赖库、selinux 限制、权限不足或 dns 超时等,需优先查看 installactions.log 定位真实退出码。
ins-20801 错误本质不是安装失败,而是底层子任务(比如 oracle net configuration assistant 或 database configuration assistant)静默崩溃后,主安装器统一抛出的兜底错误码。直接改临时目录权限只能解决其中一类场景,别指望它包治百病。
为什么改 /tmp 权限常被推荐?
Oracle 安装过程会把大量临时文件、共享内存段、IPC socket 写入 /tmp(Linux/Unix)或 %TEMP%(Windows)。如果该目录不可写、noexec 挂载、或属主/属组不匹配,netca 和 dbca 就会卡死并触发 INS-20801。
- Linux 下检查:
ls -ld /tmp—— 正常应为drwxrwxrwt,且属组是root或安装用户所在组 - 若属组不对,执行:
chown root:oinstall /tmp && chmod 1777 /tmp - 确认没挂载成
noexec:mount | grep " /tmp ",如有则需重新挂载或换用TMPDIR环境变量指向其他目录 - Windows 下检查
%TEMP%目录权限,确保安装用户有「完全控制」,且路径不含空格或 Unicode 字符
TMPDIR 环境变量比硬改系统 /tmp 更安全
强行修改 /tmp 权限可能影响系统其他服务。更稳妥的做法是在安装前显式指定 Oracle 使用的临时路径。
- Linux:在运行
runInstaller前执行:export TMPDIR=/u01/tmp && mkdir -p $TMPDIR && chmod 775 $TMPDIR && chown oracle:oinstall $TMPDIR - Windows:在命令行中执行:
set TMPDIR=E:\oracle_tmp && mkdir E:\oracle_tmp,再启动setup.exe - 注意:
TMPDIR必须是绝对路径,不能是符号链接;目录需为空,且不能与ORACLE_HOME在同一文件系统(避免 inodes 耗尽)
改完权限仍报 INS-20801?这些点大概率被忽略了
临时目录只是表象,真正拦住 netca 的往往是它依赖的底层条件没满足。
-
/etc/hosts里没正确映射本机 hostname 到127.0.0.1—— 这是最隐蔽也最高发的原因,日志里几乎不报,但netca初始化网络栈时直接 abort - 缺少
libaio(Linux)或Microsoft Visual C++ 2010 Redistributable(Windows)—— INS-20801 是它们加载失败后的通用出口 - SELinux 处于 enforcing 模式(RHEL/CentOS),会拦截
netca创建 socket,临时关闭验证:setenforce 0 - 安装用户对
$ORACLE_HOME目录没有读写执行权限,尤其bin/下的脚本无法执行,导致后续工具链断裂
INS-20801 的麻烦在于它像一个黑盒错误门:你看到的是结果,但触发它的可能是 hosts、权限、库缺失、SELinux、甚至 DNS 解析超时中的任意一个。动手前先看 $ORACLE_BASE/cfgtoollogs/installActions.log 里最后几行,找 netca 或 dbca 的真实退出码和 stderr 输出,比盲目调权限高效得多。











