Oracle 11g 在 Ubuntu 上无官方支持,所谓“安装成功”实为绕过校验、伪造发行版标识(如改 /etc/os-release 为 ID="redhat")、修复 shell 与库链接、强装 libstdc++5 等伪装操作;静默安装需严格配置 responseFile,否则易在监听器启动或数据库 open 阶段崩溃。

不能“强制安装”——Oracle 11g 在 Ubuntu 上没有官方支持,所谓“装上”,本质是绕过检测、补全缺失依赖、伪造兼容环境。强行跳过校验(比如用 runInstaller -ignoreSysPrereqs)大概率会在静默失败、GUI卡死、监听器起不来或数据库无法 open 这几个环节之一崩掉,且无有效日志可查。
为什么 Oracle 安装器会拒绝 Ubuntu 系统
安装器底层调用 uname -r 和 /etc/os-release 做硬性匹配,只认 redhat、centos、oraclelinux 等发行版标识。Ubuntu 的 ID=ubuntu 会被直接判定为不支持平台。这不是警告,是终止逻辑。
- 即使你用
runInstaller -ignoreSysPrereqs -ignorePrereq强行启动,后续仍会因libaio版本不匹配、glibc符号缺失(如GLIBC_2.14)、libstdc++5缺失等报symbol lookup error -
oraInst.loc路径权限不对、/tmp挂载了noexec、/bin/sh指向dash而非bash,都会导致静默退出,连installActions.log都可能不生成 - Ubuntu 22.04+ 默认使用
systemd-resolved,而 Oracle 11g 的tnsnames.ora解析会因 DNS 顺序异常连不上本地实例
必须做的三类系统级伪装和补丁
不是“改配置”,而是让 Oracle 安装器和运行时进程相信自己在 RHEL/CentOS 上跑:
- 伪造发行版标识:修改
/etc/os-release,把ID=ubuntu改成ID="redhat",VERSION_ID="6.10"(别写 7 或 8,11gR2 只认到 6.x);同时备份原文件,装完立刻还原 - 修复 shell 兼容性:
sudo ln -sf /bin/bash /bin/sh,否则runInstaller启动脚本里的[[ ]]语法会解析失败 - 补关键符号链接:
sudo ln -s /usr/lib/x86_64-linux-gnu/libpthread.so.0 /lib64/libpthread.so.0、sudo ln -s /usr/lib/x86_64-linux-gnu/libc.so.6 /lib64/libc.so.6、sudo ln -s /usr/bin/awk /bin/awk - 装
libstdc++5(Ubuntu 20.04+ 已移除):从 Debian oldstable 源下载libstdc++5_3.3.6-30_amd64.deb,用dpkg --force-all -i安装(这是唯一合理使用--force-all的地方)
静默安装时最易失效的参数组合
图形界面不可靠,必须走静默模式;但 responseFile 里几个字段不填对,runInstaller 会直接退出而不提示原因:
-
oracle.install.db.config.starterdb.globalDBName必须带域名,例如orcl.example.com,填orcl会触发字符集校验失败 -
oracle.install.db.config.starterdb.characterSet推荐固定用AL32UTF8,填ZHS16GBK或其它会导致sqlplus启动时报ORA-12705 -
oracle.install.db.config.starterdb.password.ALL不能含特殊字符(如@、&、$),否则响应文件解析失败,日志里只显示SEVERE: Invalid response file - 务必指定
oracle.install.db.config.starterdb.memoryLimit=1024(单位 MB),不设则默认按物理内存算,Ubuntu 虚拟机常因超限被 kill
真正麻烦的从来不是“装上”,而是装完后 lsnrctl start 报 TNS-12547: Lost contact、sqlplus / as sysdba 卡住、或者数据库实例启到 MOUNT 就停住——这些都不是安装阶段的问题,而是内核参数(如 kernel.shmmax)、用户 limits(nofile)、AppArmor 干预、甚至 /dev/shm 权限没设对导致的。每一步伪装背后,都对应一个真实运行时依赖,漏掉任何一个,都只是把崩溃时间从安装推迟到第一次连接。


















