linux下oracle10g lsnrctl沒反應 sqlplus正常 bug4518443

現象描述:使用的oracle 版本爲linux版10.2.0.1.0,在命令行界面輸入lsnrctl status後即沒有反應,同時輸入lsnrctl stop也沒有任何反應。已經連接數據庫的應用正常運行,但是新的應用無法連接數據庫。在oracle數據庫服務器使用sqlplus正常,但是在客戶端使用PL/SQL以及navicat均無法連接數據庫服務端。


問題診斷:oracle監聽宕了


經上網查詢資料,發現這是由於oracle 10.2.0.1.0中一個編號爲4518443的bug導致的,這個bug會自動創建一個子監聽器,當出現這種情況時,監聽就會掛起。而且次BUG在任何操作系統中均存在。



解決方式:

1、查看LISTNER進程(兩條語句均可以)

$ ps aux |grep LISTENER
$ ps aux |grep tnslsnr

正常情況只有一個LISTENER進程,而此BUG則會出現兩個LISTENER進程,因此需要關閉一個進程。



2、kill LISTENER進程(兩個進程均需要kill)

$ kill -9 26184



3、重啓LISTENER

$ lsnrctl stop
$ lsnrctl start



4、再次查看LISTNER進程

這個時候就會發現只存在一條LISTENER進程

$ ps aux |grep LISTENER
oracle    9635 10.8  0.0 204508  9512 ?        Rsl  Sep18 620:18 $ORACLE_HOME/bin/tnslsnr LISTENER -inherit



    到這裏爲止只是保證了LISTENER可以正常使用,如果不再進一步處理,則過一段時間還是會出現相同的問題。因此我們需要徹底的解決此問題



5、徹底解決

5.1:升級解決

將oracle版本升級到oracle 10.2.0.3以後的版本既可以。

Ps:在線升級線上生產數據庫是存在極大的風險的,一旦升級失敗將導致線上應用全部無法訪問,因此在線上使用的生產數據庫不建議使用此方法來解決這個問題,除非是升級完畢後才投入到線上使用。


5.2:修改listener.ora文件

    在listener.ora文件中加上如下參數,SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF ##這裏的listener_name是配置的listener的名字,如果是默認的就是LISTENER。具體修改如下

$ vi $ORACLE_HOME/network/admin/listener.ora 
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF



6、然後再重啓LISTENER

$ lsnrctl stop
$ lncrctl start



    如果僅僅是修改這一個BUG,建議大家使用修改listener.ora文件這個方式,同時也提醒大家在ORACLE正式投入線上使用之前先升級ORACLE。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章