Oracle 11g R2虽为闭源二进制软件,但安装仍需gcc、make、binutils等编译工具,因其runInstaller和root.sh依赖这些工具校验系统库、生成配置、链接动态模块(如libaio、libstdc++),并执行内核参数验证;缺少则prereq检查直接失败。

不能编译安装 Oracle 11g R2 —— 它是闭源商业软件,只提供预编译的二进制安装包,runInstaller 启动的是图形化或静默模式的部署流程,不是从源码构建。
为什么 gcc 等编译工具是必须的?
Oracle 安装过程本身不编译源码,但会链接、校验并动态加载大量系统级库(如 libaio、libstdc++),同时安装脚本(runInstaller、root.sh)依赖 make、gcc 等生成临时配置或补丁模块(例如 OPatch 更新、某些内核适配组件)。缺少这些工具会导致 prereq 检查失败,直接中断安装。
-
gcc和gcc-c++:用于运行安装器内部的 C/C++ 辅助工具和链接检查 -
make:执行root.sh中的 kernel parameter 验证及部分目录权限初始化 -
binutils:提供ld、ar等链接/归档工具,Oracle 安装时需调用它们验证二进制兼容性 -
compat-libstdc++-33:11gR2 的部分可执行文件仍依赖 GCC 3.4 时代的 ABI,CentOS 7 默认只有 GLIBCXX_3.4.19+,缺这个包会报libstdc++.so.5: cannot open shared object file
runInstaller 启动失败常见原因与绕过方式
即使所有依赖已装,runInstaller 仍常卡在 GUI 初始化或 pre-check 阶段。这不是编译问题,而是环境适配问题:
- 错误信息:
Unable to locate a valid Java runtime→ Oracle 自带 JRE 不兼容 CentOS 7 的 glibc 版本,需手动指定系统 JDK:./runInstaller -jreLoc /usr/java/jdk1.8.0_202(确保 JDK 是 x86_64 且版本 ≥ 1.6) - 错误信息:
Checking monitor: must be configured to display 256 colors→ 不是真要图形界面,只需设置:export DISPLAY=:0+ 运行xhost +local:(若用 X11 转发);更稳妥的做法是全程静默安装:./runInstaller -silent -responseFile /home/oracle/db_install.rsp - 错误信息:
ERROR: Unable to verify the graphical display→/etc/redhat-release内容不是redhat-7(Oracle 检查发行版标识硬编码),必须执行:echo "redhat-7" > /etc/redhat-release
最关键的三个非编译但决定成败的配置点
这些步骤不涉及代码,但任意一项遗漏都会导致安装中途崩溃或实例无法启动:
-
/etc/sysctl.conf中的kernel.shmmax必须 ≥ 实际物理内存的一半(单位字节),且kernel.shmall要换算成页数(如 8GB 内存:shmall = 2097152 → 2097152 × 4096 / 1024 / 1024 = 8GB),否则dbca创建数据库时会报ORA-27123: unable to attach to shared memory segment -
/etc/security/limits.conf中oracle用户的nofile和nproc必须设为 hard/soft 双重限制,仅 soft 不生效;且需确认session required pam_limits.so在/etc/pam.d/login或/etc/pam.d/sshd中已启用 - 监听器启动失败常因
/etc/hosts中 hostname 解析异常:执行hostname得到的值(如oradb)必须在/etc/hosts中有对应行,且不能是127.0.0.1,应为实际 IP,例如:192.168.56.10 oradb
真正难的从来不是“怎么装”,而是 Oracle 把一堆 Linux 底层机制(共享内存、信号量、PAM 限制、glibc ABI 兼容性)全耦合进安装逻辑里,且错误提示极其模糊。每一步都要验证而非跳过 —— 比如 sysctl -p 执行后必须用 sysctl kernel.shmmax 确认值已生效,不能只看命令没报错就认为 OK。


















