首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Listener 無回應故障排查:子進程衝突 Bug (4518443) 與解決方案

     編輯:Oracle 資料庫基礎

故障現象

  • lsnrctl status/start/stop 執行後長時間無回應、卡住。
  • OS 層面卻能看到兩個 tnslsnr 進程同時運行:
    oracle 111111 ... tnslsnr LISTENER -inherit
    oracle 222222 ... tnslsnr LISTENER -inherit
  • 殺掉較新的進程後,tnsping 即恢復正常。

根因分析

經 Metalink 確認,屬於 Oracle 10.2.0.1 **已知 Bug (4518443)**。高負載下監聽進程間歇性停止服務,Oracle 自動衍生子進程,導致雙進程互相干擾掛起。Listener.log 會記錄:
WARNING: Subscription for node down event still pending

解決方案 (非 RAC 環境)

在 listener.ora 中加入參數關閉 ONS 註冊功能:

SUBSCRIBE_FOR_NODE_DOWN_EVENT_=OFF

範例 (預設監聽名 LISTENER):

SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF

修改後重啟監聽:

lsnrctl stop
lsnrctl start

原理說明

  • 該參數關閉監聽器向 ONS (Oracle Notification Services) 註冊節點故障事件的功能。
  • ONS 是 RAC 組件,單機環境不需要,關閉可避免衍生子進程導致的衝突。
  • 副作用:RAC 環境下會導致 FAN (Fast Application Notification) 功能失效,**RAC 必須打補丁修復**,不可使用此參數。

驗證

修改生效後,lsnrctl status 即時回應,單一 tnslsnr 進程穩定運行,問題徹底解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved