加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用strace排查Segmentation fault错误

发布时间:2020-12-12 13:31:38 所属栏目:百科 来源:网络整理
导读:今天,DBA突然跟我说,有一台测试机的sqlplus用不了,让我帮忙看看什么问题。 问题现象就是,执行sqlplus命令后直接报错,登录不了ORACLE数据库: [[email?protected] ~]$ sqlplus Segmentation fault ? 错误信息只有"Segmentation fault",没有其它的信息。

[[email?protected] ~]$ sqlplus

Segmentation fault

?

错误信息只有"Segmentation fault",没有其它的信息。由于以前自学过一点操作系统原理,知道"Segmentation fault"表示分段错误,而Segmentation是内存方面的术语,意思就是说,可能是内存方面出错了。但是,这也看不出什么。程序报错信息是开发程序的人自己写的,谁知道这程序在什么情况下会报"Segmentation fault"这个错误。

?

所以,我尝试使用starce来追踪sqlplus的系统调用情况:

[[email?protected] ~]$ strace -o sqlplus_hang.log sqlplus

Segmentation fault

strace命令执行完成后,会在当前目录下生成包含sqlplus的系统调用情况信息的日志文件sqlplus_hang.log。查看日志文件内容最后面,发现:

说明程序尝试打开 /u01/app/oracle/product/11.2.0/dbhome_1/lib/libsqlplusic.so,但没有找到这个文件(返回值为-1)。然后程序又尝试打开 /u01/app/oracle/product/11.2.0/dbhome_1/lib/libociicus.so,还是没有找到这个文件(返回值为-1)。所以,程序最终异常终止了,并报出"Segmentation fault"的错误信息。

?

万幸的是,我在同一台机的其它地方找到了libsqlplusic.so这个库文件,看起来版本也是一样的:

然后做了个快捷链接:

[[email?protected] ~]# su - oracle

[[email?protected] ~]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/lib/

[[email?protected] lib]$ ln -s /u01/app/oracle/product/11.2.0/dbhome_1/instantclient/libsqlplusic.so libsqlplusic.so

sqlplus就可以正常使用了:

?

虽然这只是一个小故障,但是,当初我花了几个月的时间去学习C语言,我一直在想,花这么多时间,去学习跟运维工作不太搭边的C语言是不是值得的。直到今天,我第一次将学到的C语言知识派上用场。如果我不懂C语言,我想我可能会看不懂strace命令的输出,不懂C程序内部的函数调用及程序逻辑,今天这个故障就不会排查地这么顺利了。当然,我的C语言也仅限于<<C Primer Plus>>,只是C语言基础知识而已,但目前来说够了。鉴于第一次在实际工作中用上C语言知识,特地写了这边文章,以作纪念。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

今天,DBA突然跟我说,有一台测试机的sqlplus用不了,让我帮忙看看什么问题。

问题现象就是,执行sqlplus命令后直接报错,登录不了ORACLE数据库:

    推荐文章
      热点阅读