一、故障基础信息
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.so、libociicus.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
五、运维排障经验总结
-
区分告警与致命故障
[INS-13014]只是可选校验警告,不会导致 sqlplus 段错误,不要浪费时间排查该告警。 -
二进制段错误首选 strace
Oracle 工具(sqlplus/rman/exp)报 Segmentation fault,优先用 strace 抓取系统调用,快速定位缺失.so库,远比重装数据库高效。 -
标准验证动作
修复后用env -i清空所有自定义环境变量测试,排除.bash_profile、自定义 LD_LIBRARY_PATH 干扰,确保修复稳定生效。
专注于 Oracle / MySQL / PostgreSQL / 达梦等主流数据库的运维实战与架构分享,欢迎关注,一起做靠谱的数据库人。
欢迎赞赏支持或留言指正





