oracle segmentation fault错误

问题描述

今天某客户现场反馈数据库无法连接,web服务无法正常访问,初步判断是数据库出现问题,远程登录oracle服务器准备进行检查。

根据经验,一般这种情况可能是监听有问题,准备查看下监听状态:

[oracle@sysu opt]$ lsnrctl status
Segmentation fault


一脸懵逼,“Segmentation fault”传说中的段错误,一种不祥的预感涌上心头,接下来看看数据库服务

[oracle@sysu opt]$ sqlplus /nolog

Segmentation fault

what fu*k?!这下麻烦了,sqlplus没法用,好多事情就没法做了。。

问题分析:

第一反应查看/opt/oracle/admin/orcl/bdump/alert_orcl.log日志文件,看了半天没发现什么重要的错误信息,这下只能借助搜索引擎看看了。

搜索出来的结果主要是这两种:

1.该报错信息是因为在/usr/bin目录下的gcc/g++ compilers是一个文件,引起了在link的时候错误编译

解决办法:

    1. cd /usr/bin (as root)

  2. mv gcc gcc.script

  3. mv g++ g++.script

  4. ln -s gcc32 gcc

  5. ln -s g++32 g++

  6. login as oracle software owner (make sure environment is correct)

  7. cd $ORACLE_HOME/bin

  8. relink all

根据以上命令敲完之后,sqlplus还是不行,仍然是segmentation fault错误,后来又./relink all了下,shutdown -Fr now系统,系统起来之后,oracle已经启动了。

来源:http://blog.itpub.net/3090/viewspace-669836/

2.重新编译生成sqlplus

参考来源:http://www.askmaclean.com/archives/%E8%A7%A3%E5%86%B3sqlplus-segmentation-fault%E6%88%96hang%E9%97%AE%E9%A2%98.html

因为了解到服务器在出问题前升级过zlib,openssl-fips,openssh,怀疑是相关的软件更新导致该错误,隐约记得stackoverflow上有个类似问题是说过一些环境的update会导致这个错误。

问题解决:

于是尝试使用方法1解决,其实是替换了gcc的版本,操作时发现未安装gcc32,于是通过yum进行安装,在yum源里查看其实是gcc34,记得切换root账户进行安装

yum install compat-gcc-34-3.4.6-19.el6.x86_64.rpm      
yum install compat-gcc-34-c++-3.4.6-19.el6.x86_64.rpm 

安装完成后,relink all 发现问题依旧,重启服务器,问题仍未解决。

无奈,采用方法2,发现根本无法成功生成,因为这个文件根本没找到

122956_513f_3009151.png

多方尝试未果,突然在一个帖子里看到同样问题的同学,最早几个回复都是提示环境变量是否正常,虽然该同学最终解决问题是通过重启服务器解决,不过也提供了思路,是否重启服务器后重置了环境变量然后恢复呢。

123134_VXtq_3009151.png

查看LD_LIBRARY_PATH环境变量,正常情况下这个应该是空值的,不过在这里发现是有值的:

[oracle@sysu ~]$ echo $LD_LIBRARY_PATH
/usr/local/lib:/usr/lib/oracle/12.1/client64/lib

LD_LIBRARY_PATH环境变量主要是用于指定动态链接器(ld)查找ELF可执行文件运行时所依赖的动态库(so)的路径,其内容是以冒号分隔的路径列表。ld链接器将优先在该变量设置的路径中查找,若未找到则在标准库路径/lib和/usr/lib中继续搜索

于是尝试清空该变量中与oracle相关部分进行测试:

[oracle@sysu ~]$ export LD_LIBRARY_PATH=/usr/local/lib
[oracle@sysu ~]$ sqlplus

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Feb 20 12:40:36 2017

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Enter user-name: 

确认问题原因就是$LD_LIBRARY_PATH环境变量问题,鉴于/usr/lib/oracle/12.1/client64/lib被移除后正常,于是将其mv到tmp下,以免再次影响。

顺利重启监听和数据库服务后,一切恢复正常!!

再次查看下$LD_LIBRARY_PATH环境变量,发现又重新生成了/usr/lib/oracle/12.1/client64/lib,不过这次数据库就已经正常了,猜测应该是oracle运行过程中自动生成,可能在升级软件过程中重新lib库里相关文件更新导致oracle无法正常运行,总之这个segmentation fault实在是磨人,异常的莫名其妙,连出错原因都很难查找。

在此记下该问题解决过程,也给其他同学带来一点借鉴!

 

转载于:https://my.oschina.net/u/3009151/blog/841979

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值