Oracle 10g Lsnrctl沒有反映 無法串連資料庫

來源:互聯網
上載者:User

Oracle 10g Lsnrctl沒有反映 無法串連資料庫

現象描述:使用的 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進程
$ ps aux |grep LISTENER

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

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

 

到這裡為止只是保證了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

#可以添加在最後一行

然後再重啟LISTENER
$ lsnrctl stop
$ lsnrctl start

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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.