暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 11g静默安装成功后sqlplus报Segmentation fault段错误完整排障手册

原创 布衣 1天前
33

一、故障基础信息

1. 环境清单

  • OS:CentOS release 6.4 (Final),内核 2.6.32-358.el6.x86_64

  • glibc 版本:glibc 2.15

  • Oracle:11g 11.2.0.3,静默安装

  • ORACLE_HOME:/u01/oracle/11.2.0.3/product

  • 执行用户:oracle

2. 故障现象

静默安装显示成功,执行sqlplus直接抛出段错误,纯净环境测试依旧复现。

[oracle@oracle_db-10-5 ~]$ sqlplus / as sysdba Segmentation fault # 清空自定义环境变量测试,故障不变 [oracle@oracle_db-10-5 ~]$ env -i HOME=/home/oracle USER=oracle LOGNAME=oracle ORACLE_HOME=/u01/oracle/11.2.0.3/product PATH=/u01/oracle/11.2.0.3/product/bin:/usr/bin:/bin LD_LIBRARY_PATH=/u01/oracle/11.2.0.3/product/lib:/lib64:/usr/lib64 /u01/oracle/11.2.0.3/product/bin/sqlplus -v Segmentation fault

二、静默安装完整日志片段解读

1. 安装前置校验全部通过

Checking Temp space: must be greater than 120 MB. Actual 275480 MB Passed
Checking swap space: must be greater than 150 MB. Actual 2047 MB Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2026-07-29_11-34-22AM. Please wait ...

2. 安装告警:[INS-13014](非本次故障原因)

[WARNING] [INS-13014] Target environment do not meet some optional requirements.
CAUSE: Some of the optional prerequisites are not met. See logs for details. /u01/oracle/oraInventory/logs/installActions2026-07-29_11-34-22AM.log
ACTION: Identify the list of failed prerequisite checks from the log...

说明:仅可选条件不满足,不影响软件主体,和 sqlplus 段错误无关,无需优先处理。

3. 安装成功标识 & 收尾操作

The installation of Oracle Database 11g was successful.
Please check '/u01/oracle/oraInventory/logs/silentInstall2026-07-29_11-34-22AM.log' for more details.
As a root user, execute the following script(s):
1. /u01/oracle/11.2.0.3/product/root.sh
Successfully Setup Software.

已按要求用 root 执行root.sh,软件部署流程无报错。

三、strace 追踪日志定位根因(核心排障依据)

追踪命令

strace -f -o /tmp/sqlplus.strace $ORACLE_HOME/bin/sqlplus -v

1. 关键报错日志:两个核心库文件缺失

# 找不到sqlplus依赖库
open("/u01/oracle/11.2.0.3/product/lib/libsqlplusic.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
# 找不到OCI运行库
open("/u01/oracle/11.2.0.3/product/lib/libociicus.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

2. 系统基础库加载正常(排除系统依赖缺失)

libdl、libm、libpthread、libc、libaio 等系统库均可正常读取:

open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libaio.so.1", O_RDONLY|O_CLOEXEC) = 3

3. 进程崩溃信号日志

--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x28} ---
+++ killed by SIGSEGV +++

进程找不到必需的 Oracle 专属动态库,内存映射失败,触发段错误被系统杀死。

根因总结

静默安装后,instantclient目录下的libsqlplusic.solibociicus.so未自动软链接至$ORACLE_HOME/lib,动态链接加载失败引发崩溃。

四、完整修复操作(附带校验输出)

步骤 1:切换 oracle 用户,配置环境变量

su - oracle export ORACLE_HOME=/u01/oracle/11.2.0.3/product export PATH=$ORACLE_HOME/bin:/usr/bin:/bin

步骤 2:检索源库文件

find $ORACLE_HOME/instantclient -maxdepth 1 -type f ( -name "libociicu*.so*" -o -name "libociei.so*" -o -name "libociicus.so*" ) -ls

预期输出示例:

12345  1240 -rwxr-xr-x 1 oracle oinstall 1268992 Jul 29 11:34 /u01/oracle/11.2.0.3/product/instantclient/libsqlplusic.so
67890  7800 -rwxr-xr-x 1 oracle oinstall 7982336 Jul 29 11:34 /u01/oracle/11.2.0.3/product/instantclient/libociicus.so

步骤 3:创建软链接补齐依赖

# 链接sqlplus核心库 ln -sf $ORACLE_HOME/instantclient/libsqlplusic.so $ORACLE_HOME/lib/libsqlplusic.so # 兼容两种OCI库文件 if [ -f "$ORACLE_HOME/instantclient/libociicus.so" ]; then ln -sf $ORACLE_HOME/instantclient/libociicus.so $ORACLE_HOME/lib/libociicus.so elif [ -f "$ORACLE_HOME/instantclient/libociei.so" ]; then ln -sf $ORACLE_HOME/instantclient/libociei.so $ORACLE_HOME/lib/libociicus.so fi # 校验软链接 ls -l $ORACLE_HOME/lib/libsqlplusic.so $ORACLE_HOME/lib/libociicus.so

校验成功输出示例:

lrwxrwxrwx 1 oracle oinstall 78 Jul 29 11:40 /u01/oracle/11.2.0.3/product/lib/libsqlplusic.so -> /u01/oracle/11.2.0.3/product/instantclient/libsqlplusic.so
lrwxrwxrwx 1 oracle oinstall 79 Jul 29 11:40 /u01/oracle/11.2.0.3/product/lib/libociicus.so -> /u01/oracle/11.2.0.3/product/instantclient/libociicus.so

步骤 4:relink 重编译 Oracle 二进制程序

cd $ORACLE_HOME/bin ./relink all

正常会输出大量编译链接日志,无报错即完成。

步骤 5:纯净环境验证修复结果

env -i HOME=/home/oracle USER=oracle LOGNAME=oracle ORACLE_HOME=$ORACLE_HOME PATH=$ORACLE_HOME/bin:/usr/bin:/bin LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib64:/usr/lib64 $ORACLE_HOME/bin/sqlplus -v

修复成功输出示例:

SQL*Plus: Release 11.2.0.3.0 Production

五、运维排障经验总结

  1. 区分告警与致命故障
    [INS-13014]只是可选校验警告,不会导致 sqlplus 段错误,不要浪费时间排查该告警。

  2. 二进制段错误首选 strace
    Oracle 工具(sqlplus/rman/exp)报 Segmentation fault,优先用 strace 抓取系统调用,快速定位缺失.so库,远比重装数据库高效。

  3. 标准验证动作
    修复后用env -i清空所有自定义环境变量测试,排除.bash_profile、自定义 LD_LIBRARY_PATH 干扰,确保修复稳定生效。


专注于 Oracle / MySQL / PostgreSQL / 达梦等主流数据库的运维实战与架构分享,欢迎关注,一起做靠谱的数据库人。

欢迎赞赏支持或留言指正
image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论