Oracle 19c静默安装需同时满足:命令行中-ignorePrereq必须置于-responseFile之前;响应文件中须设oracle.install.db.checkForOSSupport=false、DiskSpaceCheck=false,并保留密码项,否则仍会失败。
Oracle 19c静默安装时如何加 ignorePrereq 跳过先决条件检查
直接加 ignoreprereq=true 不起作用,因为 oracle 的静默安装(runinstaller)对参数位置和组合非常敏感。必须配合 -responsefile 使用,且不能单独靠命令行传参绕过校验。
常见错误现象:./runInstaller -ignorePrereq -responseFile /path/to/db.rsp 仍报 ERROR: PRVF-0002 : could not retrieve local node name 或其他先决条件失败,说明 -ignorePrereq 被忽略或未生效。
-
-ignorePrereq必须放在-responseFile之前,顺序错则无效 - 响应文件中必须显式设置
oracle.install.db.InstallEdition=EE等必需项,否则即使跳过检查也会在后续步骤失败 - 仅适用于静默安装(
runInstaller -silent),图形界面安装不支持该参数 - Oracle 19c 的
runInstaller实际调用的是基于 Java 的 OUI,-ignorePrereq是 OUI 层开关,不是数据库引擎参数
响应文件里要改哪几处才能让 ignorePrereq 生效
光加命令行参数不够,响应文件本身也要适配。Oracle 19c 的 db_install.rsp 默认禁用跳过检查,需手动放开限制。
- 找到并修改
oracle.install.db.checkForOSSupport=true→ 改为false(否则 OS 版本检查仍会触发) - 确认
oracle.install.db.DiskSpaceCheck=false已设为false,否则磁盘空间不足时仍中断 - 删掉或注释掉
oracle.install.db.config.starterdb.characterSet=AL32UTF8这类非必需预设项,避免字符集校验连带失败 - 必须保留
oracle.install.db.config.starterdb.password.ALL=your_password,否则跳过检查后卡在密码验证
改完保存,再执行:
./runInstaller -ignorePrereq -responseFile /tmp/db_install.rsp -silent -waitforcompletion
ignorePrereq 强制通过后常见的运行时问题
跳过检查 ≠ 环境达标。很多问题会在实例启动或建库阶段暴露,比安装失败更难排查。
- 内核参数未调(如
semmsl、shmall)→ORA-27123: unable to attach to shared memory segment - 用户 ulimit 设置过低(特别是
nofile)→ORA-00020: maximum number of processes exceeded - SELinux 启用且未配置策略 →
ORA-12547: TNS:lost contact(监听器无法绑定端口) - /dev/shm 挂载点容量小于 4GB → 实例启动时报
ORA-27102: out of memory,即使物理内存充足
这些都不是安装程序能检测到的,但 ignorePrereq 会掩盖它们——所以跳过前最好用 runcluvfy.sh stage -pre dbinst -fixup 先做一次修复建议扫描。
有没有比 ignorePrereq 更稳妥的绕过方式
有,但适用场景有限。真正稳定的做法不是硬跳,而是让检查“认为”环境合格。
- 临时修改
/etc/redhat-release或/etc/os-release,把 Oracle 不认的发行版(如 Rocky 8.6)伪造成 Oracle Linux 8.6 —— 仅限测试环境,生产慎用 - 用
cvuqdisk包提前注册集群验证服务,可绕过部分节点发现类检查(PRVF-0002) - 在响应文件中设置
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE并指定oracle.install.db.config.starterdb.globalDBName,避免因数据库类型推导失败导致校验退出
强制跳过永远是最后手段。Oracle 19c 对 ignorePrereq 的容忍度比 12c 更低,尤其在 ARM64 或容器化部署中,很多检查已下沉到 cgroup 和 namespace 层级,命令行参数根本触达不到。

















