故障發生時數據庫無法通過監聽正常建立連接,檢查時會發現系統上存在兩個監聽器進程,其中一個是另外一個的子進程。
示例:
local1:/ #ps -ef | grep tnslsnr
oracle 925826 1 0 Apr 06 - 234:50 /u01/app
/oracle/product/102/bin/tnslsnr listener1 -inherit
oracle 1081540 925826 0 21:39:39 - 0:00
/u01/app/oracle/product/102/bin/tnslsnr listener1 -inherit
很多人在RAC環境下也遇到了類似的問題。
這個問題被最終確認為一個BUG,BUG號為:4518443
Oracle稱在較大壓力下,監聽進程可能出現間歇性停止服務,此時Oracle會spaw出另外一個監聽進程,進而導致兩個監聽進程互相影響的故障。
在非RAC環境下,可以通過在listener.ora中設置參數來暫時回避這個BUG。
SUBSCRIBE_FOR_NODE_DOWN_EVENT_=OFF
同時Oracle已經推出了相關Patch用來修正這個問題。