oracle 19c 官方不支持 ubuntu 22.04 原生安装,runinstaller 会因 glibc 2.35、gcc 11+ 与内核头文件版本不兼容,在编译 libasmclntsh19.ohso 等目标时链接失败;可行方案仅有 docker 容器化(如阿里云镜像)或换用 oracle linux 8。

Oracle 19c 官方不支持 Ubuntu 22.04 原生安装,runInstaller 在该系统上大概率会卡在编译阶段(如 libasmclntsh19.ohso 目标失败),这不是配置疏漏的问题,而是 glibc、GCC 和内核头文件版本不兼容导致的底层构建失败。
为什么 Ubuntu 22.04 上直接跑 runInstaller 会失败
Ubuntu 22.04 默认使用 glibc 2.35、GCC 11+ 和较新的 kernel headers,而 Oracle 19c(发布于 2019 年)只验证过 RHEL/CentOS 7/8 的工具链。你在日志里看到的类似 FATAL] Error in invoking target 'libasmclntsh19.ohso ...',本质是 make 过程调用 gcc 时链接器找不到符号或 ABI 不匹配,不是缺包、也不是权限问题。
- 即使补全
libaio1:i386、ksh、bc等所有依赖,仍会在 linking 阶段报错 -
alien转 RPM 只解决包格式,不解决编译时 ABI 兼容性 - 官方文档明确将 Ubuntu 列为「unsupported」平台,不提供任何适配补丁
可行方案只有两个:Docker 或换发行版
别折腾 sysctl、limits、DISPLAY、preinstall 脚本——这些在 Ubuntu 22.04 上全做了,runInstaller 还是会崩。真正能落地的路径只有:
-
Docker 方式:用预编译好的镜像,绕过本地编译。推荐
registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c(已验证可启动) -
换系统方式:在同台机器上用
systemd-nspawn或lxc跑一个 CentOS Stream 8 或 Oracle Linux 8 容器,在里面装原生 RPM 包
注意:OracleShellInstall 一类“一键脚本”本质是封装了上述 Ubuntu 不兼容步骤,实际运行仍会触发相同编译错误,只是把报错藏得更深。
Docker 启动时必须确认的三件事
用 Docker 跑 oracle:19c 镜像看似简单,但以下三点漏掉任意一个就会连不上或容器退出:
-
-v /mydata/oracle/oradata:/opt/oracle/oradata必须挂载,且宿主机目录权限设为chmod 777(Oracle 容器内以 oracle 用户写入,但 UID 映射不可控) -
-e ORACLE_PWD=orcl密码不能含特殊字符(如@、$、#),否则容器启动后监听失败 - 首次启动后要等
docker logs -f oracle19c输出#########################和ORACLE DATABASE IS READY TO USE!才算就绪,没看到这行就强行sqlplus会报ORA-12547: TNS:lost contact
别信“Ubuntu 22.04 兼容 19c”的二手教程
网上所谓“修改 ins_rdbms.mk、打 patch、降级 GCC”的操作,要么基于旧版 Ubuntu(如 18.04),要么实测仅在特定内核小版本下偶然成功,无法复现。2026 年当前主流内核(6.8+)和 glibc 2.35+ 组合下,没有稳定绕过编译失败的方案。
如果你必须用 Ubuntu 22.04 当宿主,唯一可靠路径就是容器化;如果必须裸金属部署,就换到 Oracle Linux 8 —— 它和 19c 是同一套 QA 流水线验证过的。











