程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle10gLsnrctl沒有反映無法連接數據庫

Oracle10gLsnrctl沒有反映無法連接數據庫

編輯:Oracle教程

Oracle10gLsnrctl沒有反映無法連接數據庫


現象描述:使用的 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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved