CentOS 上安装 Oracle 失败排查与修复
一、先定位问题
- 查看安装日志:安装器日志通常在 $ORACLE_BASE/oraInventory/logs/,图形界面失败可先看 installActions.log* 与 cvu/ 目录下的检查日志,定位具体报错关键字(如缺少库、内核参数、权限等)。
- 确认运行身份与环境:安装必须由 oracle 用户执行,不能以 root 直接运行;若报图形界面错误,检查 DISPLAY 与 xhost + 是否可用。
- 快速自检命令示例:
- 查看日志:tail -n 200 $ORACLE_BASE/oraInventory/logs/installActions*.log
- 检查 X11:echo $DISPLAY;xhost +(在 root 下执行一次即可)
- 检查用户:id oracle;groups oracle
以上做法能快速缩小问题范围,避免盲目改动系统配置。
二、环境与依赖修复
- 安装常用依赖(以 x86_64 为例,CentOS 7/8 均可用 yum/dnf):
- yum/dnf install -y binutils compat-libstdc+±33 elfutils-libelf gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc+±devel make sysstat libXp libXtst libXi unixODBC unixODBC-devel
- 若报图形库缺失(如 libXp.so.6 等),补充安装对应 libXp/libXtst/libXi 包。
- 图形界面与语言:
- 乱码可临时设置:export LANG=en_US
- 无法连接 X11:在 root 执行 xhost +,切换到 oracle 后设置 export DISPLAY=:0.0(或服务器 IP:0.0),必要时用 vncserver 或在本机 X11 转发。
- 系统版本校验误报(如新内核被识别为不受支持):可临时设置环境变量绕过检查(仅用于确认问题):export CV_ASSUME_DISTID=RHEL7.6(对应安装介质版本选择)。
- 以上步骤可解决绝大多数“依赖缺失、图形无法启动、版本校验失败”的问题。
三、内核参数与资源限制
- 内核参数(/etc/sysctl.conf,执行 sysctl -p 生效):
- fs.aio-max-nr = 1048576
- fs.file-max = 6815744
- kernel.shmall = 2097152
- kernel.shmmax = 4294967295(建议不小于物理内存,可按需调大)
- kernel.shmmni = 4096
- kernel.sem = 250 32000 100 128
- net.ipv4.ip_local_port_range = 9000 65500
- net.core.rmem_default = 262144;net.core.rmem_max = 4194304
- net.core.wmem_default = 262144;net.core.wmem_max = 1048576
- 资源限制(/etc/security/limits.conf):
- oracle soft nproc 2047;oracle hard nproc 16384
- oracle soft nofile 1024;oracle hard nofile 65536
- 会话与登录限制(/etc/pam.d/login 与 /etc/profile 中按需添加):
- session required pam_limits.so
- 在 oracle 用户的 profile 中设置:ulimit -u 16384 -n 65536
- 这些参数与限制是 Oracle 官方预检的硬性要求,未达标会导致安装器报错或建库失败。
四、常见报错与对应修复
- 缺少 libaio 导致检查失败(如 INS-20802):执行 yum install -y libaio,再 Check Again。
- 图形界面无法启动或报 X11 错误:root 执行 xhost +;oracle 用户设置 export DISPLAY=:0.0 或服务器 IP:0.0;必要时安装/启用 vncserver 或在本机启用 X11 转发。
- 链接阶段报错(如 “Error in invoking target ‘agent nmhs’ of makefile”):编辑 $ORACLE_HOME/ctx/lib/ins_ctx.mk,将 ctxhx 行改为:
- ctxhx: $(CTXHXOBJ) -static $(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK) /usr/lib64/stdc.a
保存后 Retry;如仍有问题,检查 ins_emagent.mk 的链接选项。
- 共享内存段创建失败(如 ORA-27125):将 dba 组的 GID 写入内核参数:echo <dba_gid> > /proc/sys/vm/hugetlb_shm_group,再重试建库。
- 安装器版本校验不通过:临时设置 export CV_ASSUME_DISTID=RHEL7.6 以完成安装(完成后建议恢复为实际系统标识)。
- 以上为高频问题,按报错关键字对照处理即可快速恢复。
五、网络与后续配置
- 防火墙放行(示例为 firewalld):
- firewall-cmd --zone=public --add-port=1521/tcp --add-port=5500/tcp --add-port=5520/tcp --add-port=3938/tcp --permanent
- firewall-cmd --reload;firewall-cmd --list-ports
- 监听与启停:
- 启动监听:lsnrctl start;停止:lsnrctl stop
- 数据库启停:dbstart / dbshut(若提示 ORACLE_HOME_LISTNER 问题,将脚本中的 $1 改为 $ORACLE_HOME)
- oratab 设置:确保 /etc/oratab 中实例行末尾为 Y,否则 dbstart/dbshut 不会生效。
- 这些步骤确保安装后监听与实例能正常对外提供访问。