oracle 12c安装失败主因是/tmp为tmpfs且空间不足,应通过export tmpdir指向真实磁盘上oracle用户可写的路径(如/home/ora_tmp),并验证可写性,而非扩容tmpfs。
不是磁盘真的不够,而是 oracle 安装器死磕 /tmp 这个内存挂载点——它默认只有 1–2 gb,而 12c 安装过程实际需要 4 gb 以上临时空间。
为什么 df -h /tmp 显示不足但 df -h / 很充裕
因为现代 Linux(RHEL 8+/OL 8+)的 /tmp 默认是 tmpfs 类型,即基于内存/交换的虚拟文件系统,大小由内核参数硬编码(常见为 size=1.5G),和你硬盘总容量完全无关。执行 df -T /tmp 如果 Type 列显示 tmpfs,就坐实了这点。
Oracle 12c 的 runInstaller 在解压、JNI 构建、JRE 提取阶段会疯狂往 /tmp/OraInstall* 下写临时文件,rm -rf /tmp/* 基本无效——那些目录是进程运行时动态创建的,且不会自动清理。
TMPDIR 比 TEMP 更可靠,必须设对路径和权限
runInstaller 和底层 JDK 都优先读取 TMPDIR,其次才是 TEMP;部分 12c 版本对 TEMP 支持不一致,只设 TEMP 可能白忙活。
- 目标路径必须在真实磁盘分区上(不能是
tmpfs或/dev/shm),且剩余空间 ≥6 GB - 路径需由 Oracle 用户(如
oracle)可写:chown oracle:oinstall /home/ora_tmp+chmod 1777 /home/ora_tmp - 设置方式:切换到 Oracle 用户后执行
export TMPDIR=/home/ora_tmp,再运行runInstaller - 验证是否生效:
echo $TMPDIR应输出路径;安装日志中OraInstall目录应出现在新路径下,而非/tmp
别碰 tmpfs 大小扩容,OOM 风险远高于收益
有人想改 /etc/fstab 把 tmpfs size 调大到 6G,这很危险:一旦物理内存+swap 不足,系统可能直接 OOM 杀进程甚至假死。这不是磁盘空间问题,是内存资源错配。
更稳妥的做法是彻底绕开 /tmp:用 TMPDIR 指向一个独立、空间充足的磁盘路径(如 /home/ora_tmp 或 /u01/tmp),既不用动系统配置,也不依赖重启。
真正容易被忽略的是权限和路径有效性——TMPDIR 设了但目录不存在、或 Oracle 用户没写权限,安装器会静默 fallback 回 /tmp,错误现象照旧。动手前务必 su - oracle 后手动 touch $TMPDIR/test 确认可写。











