Oracle安装报“libaio not found”或“failed to load libaio.so.1”,根本原因是系统未安装libaio运行时库,尤其在最小化安装环境下;需执行yum install -y libaio(RHEL/CentOS 7/8)或dnf install -y libaio(RHEL 8+/9、OL 8+),并补装32位兼容库libaio.i686,刷新ldconfig缓存,确保/usr/lib64/libaio.so.1存在且被动态链接器识别。
Oracle安装报错“libaio not found”或“failed to load libaio.so.1”
这是 oracle 数据库(尤其是 19c/21c 的 rpm 安装包)在 centos/rhel 或 oracle linux 上最常遇到的依赖缺失问题。根本原因不是 oracle 脚本写错了,而是系统没装 libaio 运行时库——它不随基础系统默认安装,但 oracle 的 oracle-rdbms-server-19c-preinstall 包也未必自动拉取它(尤其在最小化安装或非官方源环境下)。
验证方式很简单:运行 ldd $ORACLE_HOME/bin/oracle | grep aio,如果输出为空或提示 not found,就坐实了。
- 在 RHEL/CentOS 7/8/9 或 Oracle Linux 7/8/9 上,直接执行:
yum install -y libaio(RHEL/CentOS 7/8)或dnf install -y libaio(RHEL 8+/9、OL 8+) - 若用的是 Oracle Linux 并启用了 ULN(Unbreakable Linux Network),确保仓库已启用:
yum repolist | grep ol,再安装 - 不要尝试手动下载
.so文件复制到/lib64/—— 版本不匹配会导致oracle进程启动后立即 segfault
为什么只装 libaio 还可能失败?检查 32 位兼容性
Oracle 安装程序(尤其是旧版 12c 或某些预编译二进制)会同时尝试加载 libaio.so.1 的 64 位和 32 位版本。即使你装了 x86_64 的 libaio,缺少 i686 版本也会卡在链接阶段,报错类似:error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory(但 find /usr -name 'libaio.so.1*' 确实能查到 64 位文件)。
- 运行
uname -m确认系统架构;若为x86_64,则补装 32 位库:yum install -y libaio.i686(RHEL/CentOS 7/8)或dnf install -y libaio.i686(RHEL 8+/9) - Oracle Linux 用户注意:
ol8_baseos_latest仓库默认禁用 i686 架构支持,需先运行:dnf --setopt=override_install_lang=all install -y glibc.i686 libaio.i686 - 安装后验证:
ls /usr/lib/libaio.so.1*和ls /usr/lib64/libaio.so.1*都应存在
安装后仍提示 libaio 加载失败?检查 LD_LIBRARY_PATH 和 ldconfig
有些环境(比如用非 root 用户解压安装介质、或自定义 $ORACLE_HOME 路径)会导致动态链接器找不到 libaio,尤其当 libaio 安装路径未被 ldconfig 缓存收录时。
- 运行
ldconfig -p | grep aio,确认输出包含libaio.so.1(路径通常为/usr/lib64/libaio.so.1) - 若无输出,手动刷新缓存:
ldconfig(需 root 权限) -
LD_LIBRARY_PATH不应被硬编码指向 Oracle 自带的lib目录(如$ORACLE_HOME/lib),那里没有libaio;反而可能遮蔽系统路径 - 临时验证:在安装前加前缀运行
LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH ./runInstaller
容器环境(如 Docker)中 Oracle 安装失败怎么办?
Alpine 镜像完全不用 glibc 和 libaio,不能跑 Oracle;CentOS/RHEL 基础镜像虽含 libaio,但 Docker 默认不挂载 /dev/shm,而 Oracle 启动时依赖它,此时报错常被误判为 libaio 问题。
- 确保容器启动时加参数:
--shm-size=2g --tmpfs /dev/shm:rw,exec,size=2g - 基础镜像必须是完整版(如
oraclelinux:8),而非slim或minimal变体 - Dockerfile 中显式安装:
RUN yum install -y libaio libaio.i686 && yum clean all(OL8+ 可省略 i686,但留着更稳) - 别用
apk add或apt-get—— Oracle 二进制只认 glibc + libaio 的 ABI,musl 或不同 libc 实现直接崩溃
libaio 看似只是个轻量依赖,但它处在 Oracle 二进制和内核异步 I/O 接口之间的关键链路上;漏掉 32 位、缓存没刷新、或容器配置错位,都会让整个安装停在同一个错误提示上,而日志里几乎不提具体缺哪一环。











