根本原因是centos 7默认yum源不包含oracle所需的i686架构兼容库(如libaio.i686),而安装器严格检查32位动态链接库libaio.so.1;即使x86_64版已安装,仍需显式执行yum install libaio.i686,并配本地源或启用extras仓库确保可用。
centos 7 安装 oracle 11g 时依赖包缺失,根本原因不是“少装了几个包”,而是默认 yum 源不包含部分关键兼容库(尤其是 i686 架构的 libaio、libgcc、libstdc++ 等),且 oracle 安装器会同时检查 32 位和 64 位依赖。直接 yum install 常报 “no package available”,必须先配好本地源或启用对应仓库。
为什么默认 yum install libaio 失败但安装却报 missing libaio.so.1?
Oracle 11g 安装器(runInstaller)在检测阶段会调用 ldd 扫描动态链接库,明确要求 libaio.so.1(来自 libaio-0.3.109-13.el7.i686),而 CentOS 7 默认只启用了 base 仓库,i686 包被归类到 extras 或需手动启用的多架构支持中。即使 yum list libaio 显示已安装 x86_64 版本,仍会失败。
-
yum install libaio默认只装x86_64,但 Oracle 需要i686版本(用于 32 位兼容运行时) - 执行
rpm -q libaio libaio.i686可验证是否双架构都存在 - 若只返回
libaio-0.3.109-13.el7.x86_64,说明i686缺失,必须显式安装:yum install libaio.i686
配置本地 YUM 源(挂载 ISO)避免网络依赖
内网/离线环境必须用本地源。CentOS 7 DVD ISO 中已包含全部所需依赖(含 i686),只需正确挂载并启用:
- 挂载 ISO:
mount /dev/cdrom /mnt(确保设备名正确,可用lsblk确认) - 备份原 repo:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak - 新建
/etc/yum.repos.d/local.repo,内容为:[local] name=CentOS $releasever - local baseurl=file:///mnt/ gpgcheck=0 enabled=1
- 刷新缓存:
yum clean all && yum makecache,再执行yum repolist确认local已生效
批量安装 Oracle 11g 必需依赖(含 i686 架构)
以下命令覆盖所有常见缺失项,包括图形界面安装所需的 libXi、libXtst,以及静默安装必需的 unixODBC-devel:
- 基础编译与运行时:
yum install -y gcc gcc-c++ make binutils ksh sysstat - 核心 C/C++ 库(务必加
.i686):yum install -y glibc.i686 libgcc.i686 libstdc++.i686 libaio.i686 - Oracle 特定依赖:
yum install -y libaio-devel.i686 unixODBC unixODBC-devel elfutils-libelf-devel compat-libcap1 compat-libstdc++-33 - GUI 安装额外项(如用 VNC 运行
runInstaller):yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
执行完后,用 rpm -q libaio libaio.i686 libgcc libgcc.i686 快速复核,输出应为 4 行完整包名,无 “package is not installed”。
遇到 “cannot find -lclntsh” 或 “libclntsh.so.11.1: cannot open shared object file” 怎么办?
这不是依赖缺失,而是 Oracle 安装后未正确设置运行时库路径。该错误常出现在 sqlplus 启动或监听器配置阶段,根源是 LD_LIBRARY_PATH 未包含 $ORACLE_HOME/lib。
- 临时修复:
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH - 永久生效:在
/home/oracle/.bash_profile末尾追加该export行,并执行source ~/.bash_profile - 注意:不要用
ldconfig全局添加,Oracle 11g 的libclntsh.so.11.1是版本锁定的,混入其他 Oracle 版本库易引发冲突
真正容易被忽略的是:所有 i686 依赖必须和 x86_64 同时存在,且 yum install 时不能省略架构后缀;本地源配置后必须 yum makecache,否则 yum 仍查不到 i686 包。











