ORA-07445 表明 Oracle 18c XE 在 Ubuntu 上因 glibc 版本不兼容(Ubuntu 22.04+ 的 2.35+ vs 18c 编译依赖的 2.17–2.28)触发段错误,非缺依赖或 swap 不足所致;需用 alien 转包并手动修复路径、安装 policycoreutils 防 configure 误判、配置监听绑定真实 IP 并启用 XML DB。
ORA-07445 出现就说明安装流程已踩进内核兼容陷阱
oracle 18c xe 在 ubuntu 上不是“装不上”,而是装上后一启动就 ora-07445 —— 这是 oracle 进程在非官方支持的 linux 发行版上触发段错误的典型信号。ubuntu 不在 oracle 官方支持列表里(只认 oracle linux、rhel、centos),所以直接跑 oracle-database-xe-18c-1.0-1.x86_64.rpm 或用 alien 转成 deb 后硬启,大概率崩在 oraagent.bin 或 tnslsnr 阶段。
- 根本原因不是缺
libaio1或bc,而是 glibc 版本偏高(Ubuntu 22.04+ 自带 glibc 2.35+,而 18c XE 编译时链接的是 2.17–2.28 区间) - swap 不足会卡在 configure 阶段报错,但
ORA-07445是运行时崩溃,和 swap 无关 - 别信“加
kernel.shmmax就能过”的说法——这能骗过 preinstall 检查,骗不过 Oracle 的共享内存段校验逻辑
用 alien 转 rpm 是最省事的路径,但必须打补丁才能跑起来
Oracle 只提供 RPM 包,Ubuntu 必须转。但 alien -i 默认不处理符号链接重定向和 postinst 脚本里的硬编码路径,直接装完几乎必然失败。
- 先装依赖:
sudo apt update && sudo apt install alien libaio1 unixodbc wget - 下载 RPM:
wget https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm(注意:该 URL 已需 Oracle 账号登录,若 404 请改用存档镜像) - 转包前手动解压检查:
rpm2cpio oracle-database-xe-18c-1.0-1.x86_64.rpm | cpio -idmv,重点看./etc/init.d/oracle-xe-18c是否含/lib64/ld-linux-x86-64.so.2硬引用 - 转完先不安装:
sudo alien --scripts -d oracle-database-xe-18c-1.0-1.x86_64.rpm,生成oracle-database-xe-18c_1.0-2_amd64.deb - 解包 deb 修改启动脚本:
dpkg-deb -x *.deb tmp/ && dpkg-deb --control *.deb tmp/DEBIAN,编辑tmp/DEBIAN/postinst,把所有/usr/lib/oracle/xe/rpm/install替换为/usr/lib/oracle/xe/app/oracle/product/18c - 重打包并安装:
dpkg-deb -b tmp oracle-xe-18c-fixed.deb && sudo dpkg -i oracle-xe-18c-fixed.deb
configure 失败 / 监听器起不来?八成是 SELinux 模拟器在捣鬼
Ubuntu 没有 SELinux,但 Oracle 18c XE 的 configure 脚本会调用 sestatus 并根据返回值决定是否跳过某些初始化步骤。如果系统里没装 policycoreutils,它可能静默失败或写坏配置文件。
- 装个假的
sestatus防止脚本误判:sudo apt install policycoreutils(哪怕不用 SELinux,这个包提供的命令能让 configure 流程走通) -
/etc/init.d/oracle-xe-18c configure时端口别选 8080 —— Ubuntu 的 snapd 常占着 8080,冲突会导致 APEX 服务无法绑定 - 若提示 “Port 1521 is already in use”,别急着 kill 进程,先查是不是
systemd-resolved占了 UDP 1521(sudo ss -tulnp | grep :1521),这是 Ubuntu 20.04+ 的常见干扰项 - 配置成功后,首次启动前务必执行:
sudo systemctl daemon-reload && sudo systemctl enable oracle-xe-18c,否则 reboot 后服务不会自启
远程访问 APEX 页面 404 或拒绝连接?不是防火墙问题
即使 netstat -tlnp | grep 1521 显示监听正常,http://your-ip:8080/apex 仍可能 404 —— 因为 Oracle 18c XE 的 APEX 默认只绑 127.0.0.1,且 HTTP 监听器默认关闭。
- 进 SQL*Plus 执行:
sqlplus / as sysdba,然后运行:EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);和EXEC DBMS_XDB.SETHTTPPORT(8080); - 确认监听器状态:
lsnrctl status,若输出里没有HTTP服务行,说明 XML DB 没启用,需运行:ALTER DATABASE OPEN;+ALTER SYSTEM REGISTER; - Ubuntu 的
ufw默认关着,但如果你开了,要放行两个端口:sudo ufw allow 1521 && sudo ufw allow 8080 - 浏览器访问时别用
localhost,用服务器真实 IP;Chrome 对 localhost 的 HTTP/HTTPS 混合策略更严格,建议用 Firefox 或 curl 测试:curl -v http://<code>your-ip:8080/apex
真正麻烦的从来不是装上,而是装上后发现 sqlplus 能连、tnsping 能通、但 SELECT * FROM V$VERSION 报 ORA-01034: ORACLE not available —— 这说明实例没挂载,而日志藏在 /u01/app/oracle/diag/rdbms/xe/XE/trace/ 里,不是 /var/log/oracle。没人会一开始就想翻 trace 文件,但这就是 Ubuntu 跑 Oracle 最常卡住的地方。

















