Oracle 11g 启动报 ORA-27102 通常因 kernel.shmmax 和 shmall 过小,非内存不足;shmax 应 ≥ SGA 最大值(如64GB内存设为34359738368),shmall = shmax/4096(如32GB对应8388608),需 sysctl -p 生效;安装前须装齐 binutils、compat-libcap1 等 RPM 包,其中 compat-libcap1 需手动安装;ORACLE_HOME 和 ORACLE_SID 必须准确配置于 .bash_profile 并 source;图形安装需 xhost +SI:localuser:oracle 及正确 DISPLAY。
检查 /proc/sys/kernel/shmall 和 shmax 是否足够
oracle 11g 启动时若报 ora-27102: out of memory,大概率是这两个内核参数设得太小,不是内存真不够。centos 默认值对 oracle 来说几乎总是不够的,尤其在分配大 sga 时。
-
shmax应 ≥ 最大单个共享内存段大小(通常设为物理内存的一半,比如 64GB 内存就设34359738368) -
shmall单位是页(page),默认页大小 4KB,所以得换算:若要支持 32GB 共享内存,shmall = 34359738368 / 4096 = 8388608 - 临时生效用
sysctl -w kernel.shmall=8388608;永久写入/etc/sysctl.conf,别忘了sysctl -p重载 - 改完务必验证:
sysctl kernel.shmall和sysctl kernel.shmmax,别只改文件不 reload
安装前必须装齐的 RPM 包有哪些
Oracle 11g 安装程序不报具体缺哪个包,只弹出“checking requirements…” 然后静默失败,或卡在 ins_emagent.mk 编译阶段。这是 CentOS 7+ 上最常踩的坑——它其实依赖一堆老版本兼容包。
- 核心依赖:
binutils、compat-libcap1、gcc、gcc-c++、glibc、glibc-devel、ksh、libgcc、libstdc++、libstdc++-devel、libaio、libaio-devel、make、sysstat - 特别注意:
compat-libcap1在 CentOS 7 默认源里没有,得手动装:yum install https://vault.centos.org/7.9.2009/os/x86_64/Packages/compat-libcap1-1.10-7.el7.x86_64.rpm - 别信 “minimal install 就够了” ——
gcc-c++和libaio-devel很容易漏,它们影响监听器和数据库进程启动
Oracle 用户环境变量 ORACLE_HOME 和 ORACLE_SID 怎么设才不冲突
装完跑 sqlplus / as sysdba 报 ORA-01034: ORACLE not available,十有八九是环境变量没生效,或者多个实例间互相污染。
-
ORACLE_HOME必须指向解压/安装后的实际路径(如/u01/app/oracle/product/11.2.0/db_1),不能带末尾斜杠 -
ORACLE_SID要和创建数据库时指定的 SID 完全一致(大小写敏感),且不能含下划线以外的特殊字符(orcl_1可以,orcl-1不行) - 建议把变量写进
/home/oracle/.bash_profile,而不是.bashrc—— Oracle 安装脚本和 dbca 多数只读 profile - 每次改完记得
source ~/.bash_profile,再用env | grep ORA确认是否加载成功
运行 runInstaller 前为什么必须执行 xhost +
图形界面安装卡在白屏、无响应、或直接报 Unable to locate a valid Java runtime,往往不是 Java 问题,而是 X11 转发权限被拒。CentOS 默认禁用本地用户访问 X server。
-
xhost +是最快绕过方式(仅限内网安全环境),但别在生产服务器上长期开着 —— 它允许任意本地用户连接显示 - 更稳妥的做法是切换到 oracle 用户后执行:
xhost +SI:localuser:oracle - 确保 DISPLAY 已设:
echo $DISPLAY应输出类似localhost:10.0;如果用 Xming 或 MobaXterm,需开启 X11 forwarding 并确认端口没被防火墙拦 - 如果实在不想开图形,可用静默安装:
./runInstaller -silent -responseFile /path/to/response.rsp,但 response 文件里oracle.install.db.config.starterdb.type等字段极易填错,调试成本更高
内核参数和 RPM 包这两块最容易漏检,尤其是 compat-libcap1 和 shmall 换算。装完别急着建库,先切 oracle 用户跑一遍 env 和 sysctl -p 输出,比反复重装快得多。










