oracle 19c静默安装失败主因是环境、权限、响应参数三者未严丝合缝:oracle用户主组非oinstall、响应文件路径非法或参数错配(如unix_group_name大小写错误)、依赖未由oracle-database-preinstall-19c rpm兜底、swap<8gb或/u01空间<35gb且权限未对oracle开放,均导致runinstaller卡在初始化或静默退出。
runinstaller 静默安装 oracle 19c 不是“配好文件就能跑”,而是环境、权限、响应参数三者必须严丝合缝;任意一环错位,runinstaller -silent -responsefile 就会卡在初始化阶段或直接报 [fatal] 错误退出——不是安装失败,是根本没进入安装逻辑。
oracle用户权限和组配置必须一步到位
runInstaller 启动时会校验当前用户是否属于 oinstall 组,并检查其主组(primary group)是否为该组。常见错误如:
- 报错 ERROR: Unable to get the current group ID for user 'oracle':说明当前 shell 未以 oracle 用户身份运行,或该用户未被正确设为主组 oinstall
- 即使 id oracle 显示已加入 oinstall 和 dba,但若主组不是 oinstall,仍会失败
确保方式:
- 创建用户时显式指定主组:useradd -u 54321 -g oinstall -G dba,oper oracle
- 设置密码后,用 su - oracle 切换(不是 su oracle),保证加载完整环境
- /u01/app/oracle 和 /u01/app/oraInventory 必须属主为 oracle:oinstall,且目录存在、无 SELinux 上下文残留(ls -Z 确认)
db_install.rsp 关键参数不能照搬模板
官方提供的database/response/db_install.rsp 是通用模板,6 项不改必挂:
必须修改的参数:
- oracle.install.option=INSTALL_DB_SWONLY:仅装软件(推荐)。若填 INSTALL_DB_AND_CONFIG,需额外补全数据库名、字符集、监听端口等 10+ 参数,极易漏配
- UNIX_GROUP_NAME=oinstall:大小写敏感,填 OINSTALL 或 oinstall1 都会导致组校验失败
- INVENTORY_LOCATION=/u01/app/oraInventory:路径必须存在、可写,且不能与 ORACLE_HOME 同级或嵌套
- ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1:末尾不可加斜杠;19c 是占位标识,可改为 19.3.0,但层级不能多一层(如 .../dbhome_1/)
- ORACLE_BASE=/u01/app/oracle:必须是 ORACLE_HOME 的直接父级或上两级,不能等于 ORACLE_HOME
- oracle.install.db.InstallEdition=EE:按实际许可证填 EE 或 SE2;填错会导致安装后 sqlplus / as sysdba 连不上实例
必须设为 true 的安全项:
- DECLINE_SECURITY_UPDATES=true:不设则静默过程卡死在交互式确认页
依赖和内核参数必须由 rpm 预装包兜底
手动yum install 数十个包,极易漏掉 i686 架构的兼容库(如 libaio.i686)、或版本号带 el7_9 后缀的 glibc 补丁。更稳的方式是用 Oracle 官方 oracle-database-preinstall-19c RPM:
执行流程:
- 下载并安装:wget https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-2.el7.x86_64.rpm && rpm -ivh oracle-database-preinstall-19c-1.0-2.el7.x86_64.rpm
- 它会自动:
- 创建 oracle 用户(UID 54321)和全部必需组
- 写入 25+ 条内核参数到 /etc/sysctl.conf 并立即生效
- 配置 /etc/security/limits.d/oracle-database-preinstall-19c.conf 中的 nofile/memlock
- 安装所有依赖,包括 libstdc++-devel.i686 这类易忽略项
- 执行完后仍需手动运行 sysctl -p 和 ulimit -a 验证是否生效
swap 和磁盘空间不足会导致 runInstaller 直接退出而非报错
runInstaller 对资源检查非常“安静”:不满足最低要求时不会打印明确提示,而是日志里出现 INFO: Validating prerequisites... 后就静默退出,返回码为 1。
必须提前验证:
- free -h 确认 swap ≥ 8GB(不是“接近”)
- df -h /tmp 确认可用 ≥ 10GB(runInstaller 解压临时文件用)
- df -h /u01 确认可用 ≥ 35GB(官方文档写 20GB,但实测解压 + 编译阶段需 30GB+)
- 若使用非默认路径(如 /data/u01),要同步检查该路径的 inode 使用率:df -i /data/u01,Oracle 安装过程生成大量小文件,inode 耗尽也会失败
真正容易被忽略的是:所有检查必须在 oracle 用户上下文中做。比如 df -h /u01 在 root 下看有 40GB,但若该目录权限未开放给 oracle 用户读写,runInstaller 仍会因无法创建临时目录而中断——它不会告诉你“权限不够”,只会说“prerequisites failed”。











