不管是查看狀態還是啟停 listener都沒有反映
lsnrctl status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=KJPTSERVER1)(PORT=1521)) )
執行 ps -ef|grep tnslsnr
Oracle 111111 1 0 Aug 25 - 9:44 /Oracle/database/product/10.2.0/bin/tnslsnr LISTENER -inherit
oracle 222222 3333333 0 04:50:31 - 0:00 /Oracle/database/product/10.2.0/bin/tnslsnr LISTENER -inherit
根據上次啟動的時間殺掉比較新的。
發現listener可以tnsping 通。
問題原因:來源於網上,
在Metalink上可以找到相關問題的很多解釋,這個問題被最終確認為Oracle10201一個BUG,BUG號為:4518443,其會自動創建一個子監聽器,當出現此情況時,監聽器將會掛起。
Oracle稱在較大壓力下,監聽進程可能出現間歇性停止服務,此時Oracle會spaw出另外一個監聽進程,進而導致兩個監聽進程互相影響的故障。
檢查監聽日志文件 $Oracle_HOME/network/log/listener.log 有如下語句:
WARNING: Subscription for node down event still pending
解決方法:
已經按照此方法處理,(10分鐘前處理的還不知道結果如何)
在非RAC環境 下,可以通過在listener.ora中設置參數:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF
來暫時回避這個BUG。
具體操作:在listener.ora 文件裡加入(我加在了最後):(NO-RAC)
SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF
其中,<listener_name> 是數據庫的監聽器的名稱。如:默認情況下,監聽器名為:LISTENER 。則語句就是:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER =OFF
重啟監聽程序:
lsnrctl stop
lncrctl start
按照 metalink的說法,這個語句關閉了監聽自動向ONS(Oracle Notification Services)注冊,正是這個注冊可能導致監聽啟動子進程。ONS是RAC中的一個組件,禁用該特性將導致RAC的FAN(Fast Application Notification)特性不可用。
如果是RAC則必須打補丁。
我采用的是這個方式。