可行,但需绕过发行版硬校验(临时改/etc/os-release为ID="rhel"并删除/etc/redhat-release)、补全libnsl等特有依赖、禁用runInstaller联网行为,并严格隔离网络环境以避免校验失败。

离线安装 Oracle 19c 在银河麒麟 V10 上可行,但必须绕过发行版硬校验、补全特有依赖、并严格隔离网络环境——因为 Oracle 官方不提供源码,runInstaller 会主动联网校验更新和安全补丁,离线失败的第一原因往往是未禁用该行为。
为什么 runInstaller 在离线环境下直接报 INS-32037 或卡在“Checking network connectivity”
Oracle 19c 的 runInstaller 启动时默认尝试连接 https://updates.oracle.com,即使跳过邮箱配置,它仍会发起 DNS 查询和 HTTP HEAD 请求;若超时或失败,部分版本会回退到更严格的 OS 校验逻辑,放大 INS-32037 错误概率。此外,/etc/redhat-release 存在(哪怕为空)会优先触发校验,比 /etc/os-release 更早失败。
- 必须先
rm -f /etc/redhat-release,否则修改/etc/os-release无效 - 离线前需确认系统已预装
libnsl.x86_64(ARM 架构用libnsl.aarch64),麒麟源中该包常被标记为“可选”,yum install libnsl不自动拉取 -
runInstaller内置的 Java 运行时会尝试加载远程字体资源,图形化离线安装需提前运行xset +fp /usr/share/fonts/并执行fc-cache -fv
离线静默安装必须重写的 db_install.rsp 关键字段
直接复用 RHEL 的响应文件在麒麟离线环境中几乎必败:字符集未显式声明会导致数据库创建时默认 ZHS16GBK,后续应用连接报 ORA-12705;而 oracle.install.db.config.starterdb.characterSet 字段若缺失,静默模式不会提示,只会静默失败。
-
oracle.install.db.config.starterdb.characterSet=AL32UTF8—— 必须显式设置,不能依赖默认值 -
oracle.install.db.config.starterdb.memoryOption=false—— 离线环境禁用自动内存计算,避免因 cgroup 或 numa 检测异常中断 -
oracle.install.db.config.starterdb.password.ALL=your_secure_password—— 所有账户密码必须统一且满足复杂度(至少 8 位,含大小写字母+数字+符号) -
oracle.install.db.rootconfig.executeRootScript=false—— 离线时建议设为false,手动执行root.sh更可控;若设为true,安装器会尝试调用sudo并检查 PATH,离线镜像常缺sudo依赖链
离线环境下的 libpthread_nonshared.a 缺失问题
麒麟 V10 SP2+ 使用 glibc 2.28+,已移除 libpthread_nonshared.a,但 Oracle 19c 安装过程中的 make -f ins_rdbms.mk 阶段硬依赖该静态库链接 libasmclntsh19.so。离线时无法通过 yum 或 dnf 补源,只能本地注入。
- 从 CentOS 8.6 或 RHEL 8.6 的
/usr/lib64/libpthread_nonshared.a复制过来(注意架构一致) - 放入麒麟系统
/usr/lib64/后,执行chmod 644 /usr/lib64/libpthread_nonshared.a - 解压 Oracle 安装包前,先运行
export LIBRARY_PATH=/usr/lib64:$LIBRARY_PATH,确保 make 能定位到该文件 - 若已解压,需删除
$ORACLE_HOME/lib/stubs/下所有内容并重新解压,否则缓存 stub 会跳过真实链接
离线安装后必须立即处理的三项收尾动作
临时修改 /etc/os-release 是权宜之计,离线环境更易忽略还原步骤,导致后续系统管理工具(如 dnf update、合规扫描工具)误判系统身份,引发仓库同步失败或等保检查不通过。
- 安装完成后,立刻执行
cp /etc/os-release.bak /etc/os-release还原原始文件 - 检查
lsb_release -a输出是否恢复为ID=kylin,若仍是rhel,说明 shell 环境未刷新,需exec bash或重新登录 - 手动运行
$ORACLE_HOME/root.sh(若之前设为 false),并确认输出中无ERROR: unable to get system info—— 离线时该错误常因/proc/sys/net/core/somaxconn读取超时触发,需提前在/etc/sysctl.conf中固化该值
离线安装真正的难点不在步骤多,而在于每个环节都缺乏反馈:网络不通不报错、依赖缺失只跳过、字符集错误要到建库后才暴露。最稳妥的做法是,在离线前先用相同介质在联网环境走通一次完整流程,记录所有 stdout/stderr 中的 warning 和 skipped 项,再针对性屏蔽或预置。











