oracle 19c未官方支持ubuntu 22.04,安装需绕过os检查(设cv_assume_distid=ol8)、手动补全依赖(如libaio1:i386、ksh、bc、libmotif4)、配置x11转发或改用静默安装,并严格设置limits.conf中soft/hard双限值。

Oracle 19c 官方不提供 Ubuntu 原生 .deb 包,Ubuntu 22.04 虽然被社区广泛用于部署 19c,但**不是 Oracle 官方认证支持的平台**——这意味着安装过程必然绕过检查、手动补全依赖、并承担后续升级与支持风险。别指望 apt install oracle-19c 这种事存在。
为什么 runInstaller 直接报错“Unsupported OS”或卡在 makefile target?
Oracle 安装器内置操作系统白名单(只认 RHEL/OEL/OL),Ubuntu 22.04(codename jammy)不在其中。常见报错如:Error in invoking target 'libasmclntsh19.ohso ...' of makefile,本质是编译阶段因头文件路径、glibc 版本或内核符号缺失导致链接失败,而非单纯缺包。
- 必须设置
CV_ASSUME_DISTID=ol8强制模拟 Oracle Linux 8 环境(不是rhel8,Oracle 检查逻辑只认ol*) - 仅靠
apt install build-essential gcc libaio1不够:libaio1:i386(32 位兼容库)、ksh(Oracle 脚本硬依赖)、bc(数值计算)、libmotif4(GUI 组件)都得手动装 -
alien -i *.rpm会跳过所有%pre脚本:用户创建、组权限、sysctl 参数写入全得你手敲,漏一项就卡在runInstaller启动前
DISPLAY=:0 报错 “Can't connect to X11 window server” 怎么破?
这不是没装桌面,而是 oracle 用户根本没被授权访问当前 X session。只运行 xhost + 是危险且无效的——它允许所有客户端连接,但 Ubuntu 的 Wayland 默认屏蔽了传统 X11 socket 转发。
- 切到
oracle用户后,先确认当前 DISPLAY 值:echo $DISPLAY;若为空,用export DISPLAY=$(loginctl show-session $(loginctl | grep "seat" | head -n1 | awk '{print $1}') -p Type | grep -q "wayland" && echo "localhost:10.0" || echo ":0") - 更可靠的做法是改用 SSH X11 转发:
ssh -X oracle@localhost,前提是/etc/ssh/sshd_config中X11Forwarding yes已启用且重启了sshd - 图形界面只是可选路径;真正省事的是静默安装:
./runInstaller -silent -responseFile /path/to/db_install.rsp,避免 GUI 依赖
用 Docker 跑 Oracle 19c 是不是更稳?
是,但稳的前提是你接受容器化约束:数据卷权限、内存限制、无 root 权限下的内核参数调整不可控。第三方镜像(如 registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c)已预打包所有依赖和 patch,跳过了 host 系统兼容性校验。
- 必须给容器分配至少
4GB RAM(-m 4g),否则启动时 OOM kill 导致Exited (137) - 挂载目录如
/mydata/oracle/oradata必须chmod 777 -R,Oracle 容器内进程以非 root 用户运行,无法自动 chown - 不要用
--network=host:它让容器共享 host 网络栈,但 Ubuntu 22.04 的 netfilter 规则可能干扰监听,优先用-p 1521:1521映射端口 - 镜像中
ORACLE_CHARACTERSET设为ZHS16GBK时,客户端连接需显式指定字符集,否则中文乱码
最关键的遗漏点:/etc/security/limits.conf 的 hard/soft 必须成对出现
几乎所有教程只写 oracle soft nofile 65536,但 Oracle 19c 启动时会同时检查 hard 限制。若 hard nofile 仍为系统默认值(通常是 4096),监听进程会因无法打开足够 socket 而静默失败,日志里只显示 TNS-12535 或 ORA-12519,根本不会提示 limits 错误。
务必确认以下四行同时存在且生效:
oracle soft nofile 65536 oracle hard nofile 65536 oracle soft nproc 16384 oracle hard nproc 16384
改完后需重新登录 oracle 用户,或执行 sudo systemctl restart systemd-logind 刷新 limits 上下文。这个细节不验证,装完也连不上。











