oracle segmentation fault錯誤

問題描述

今天某客戶現場反饋數據庫沒法鏈接,web服務沒法正常訪問,初步判斷是數據庫出現問題,遠程登陸oracle服務器準備進行檢查。html

根據經驗,通常這種狀況多是監聽有問題,準備查看下監聽狀態:c++

[oracle@sysu opt]$ lsnrctl status
Segmentation fault


一臉懵逼,「Segmentation fault」傳說中的段錯誤,一種不祥的預感涌上心頭,接下來看看數據庫服務web

[oracle@sysu opt]$ sqlplus /nolog

Segmentation fault

what fu*k?!這下麻煩了,sqlplus無法用,好多事情就無法作了。。sql

問題分析:

第一反應查看/opt/oracle/admin/orcl/bdump/alert_orcl.log日誌文件,看了半天沒發現什麼重要的錯誤信息,這下只能藉助搜索引擎看看了。數據庫

搜索出來的結果主要是這兩種:bash

1.該報錯信息是由於在/usr/bin目錄下的gcc/g++ compilers是一個文件,引發了在link的時候錯誤編譯服務器

解決辦法:oracle

    1. cd /usr/bin (as root)ssh

  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,發現根本沒法成功生成,由於這個文件根本沒找到

多方嘗試未果,忽然在一個帖子裏看到一樣問題的同窗,最先幾個回覆都是提示環境變量是否正常,雖然該同窗最終解決問題是經過重啓服務器解決,不過也提供了思路,是否重啓服務器後重置了環境變量而後恢復呢。

查看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實在是磨人,異常的莫名其妙,連出錯緣由都很難查找。

在此記下該問題解決過程,也給其餘同窗帶來一點借鑑!

相關文章
相關標籤/搜索