關於Oracle10.2.0自行啓動兩個監聽進程致使服務中斷問題

環境: php

AIX6.1java

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64binode

Tomat 5.0.28linux

Oracle的安裝文件是 10gr2_aix5l64_database.cpio.gzsql

 

問題描述: 數據庫

服務運行大約一週後,Oracle不能鏈接、網站、業務系統中斷服務。tomcat沒有問題,可是Oracle監聽不能正常服務,勇pl/sql鏈接長時間無反應,用proxool的監控servlet看一下發現是可用鏈接池可用鏈接數爲0。初步肯定是數據庫出現了問題。windows

 

 

排查問題: tomcat

一、用sqlplus/nolog、conn /as sysdba、select cos(1) from dual 後能夠正常查詢數據庫內容,肯定數據庫自己沒有問題,問題可能在監聽上;oracle

二、執行lsnrctl status,app

$ lsnrctl stop

LSNRCTL for IBM/AIX RISC System/6000: Version 10.2.0.1.0 - Production on 01-SEP-                                                                                        2010 14:46:33

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=KJPTSERVER1)(PORT=1521)) )

......

長時間沒有反應,肯定問題在監聽上;

三、執行ps -ef|grep tnslsnr,

結果以下

$ ps -ef|grep tnsl
 oracle  422142             1   0    Aug 25      -  9:44 /oracle/database/product/10.2.0/bin/tnslsnr LISTENER -inherit
 oracle 1024058  422142   0 04:50:31      -  0:00 /oracle/database/product/10.2.0/bin/tnslsnr LISTENER -inherit

 oracle 1077302  831654   0 14:50:11  pts/1  0:00 grep tnsl


發現兩個lsnrctl進程(前兩個),從激活時間看,第一個監聽是正常的、最初啓動Oracle時建立的,第二個監聽是第一個的派生、是不正常的。

四、kill第二個可疑監聽進程

kill -9 1024058

一切恢復正常。

 

 

緣由解讀:

在Metalink上能夠找到相關問題的不少解釋,這個問題被最終確認爲Oracle10201一個BUG,BUG號爲:4518443,其會自動建立一個子監聽器,當出現此狀況時,監聽器將會掛起。
Oracle稱在較大壓力下,監聽進程可能出現間歇性中止服務,此時Oracle會spaw出另一個監聽進程,進而致使兩個監聽進程互相影響的故障。
檢查監聽日誌文件 /oracle/database/product/10.2.0/network/log/listener.log 有以下語句:
WARNING: Subscription for node down event still pending

 

 

解決方案:
一、在非RAC環境 下,能夠經過在listener.ora中設置參數:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_=OFF
來暫時迴避這個BUG。

具體操做: 在listener.ora 文件里加入(我加在了最後):(NO-RAC)
SUBSCRIBE_FOR_NODE_DOWN_EVENT_=OFF
其中, 是數據庫的監聽器的名稱。如:默認狀況下,監聽器名爲: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則必須打補丁。

 

補充一下:有網友反映,

「有時候加上這句話無效,連續兩天出現swap和load太高仍致使數據庫沒法提供服務,甚至OS都沒法登錄。kill掉子進程後系統恢復正常。按照Oracle的建議,刪除了ONS的配置文件$ORACLE_HOME/opmn/conf /ons.config,暫時看起來正常了。

我沒有遇到,先不作評論,到時候再說吧。


二、Oracle已經推出了相關Patch用來修正這個問題,能夠在metalink上下載相關補丁並使用

/oracle/database/product/10.2.0/OPatch/opatch apply 安裝便可。遺憾的是須要oracle服務賬號,我這裏的沒有購買oracle又沒找到「免費」的,因此沒有試驗。

 

若是哪位有10.2.0的4518443補丁文件麻煩留言或者發給我freemail1001@163.com,windows、aix、linux下的均可以。

 

 

我在windows[10.2.0.1.0]、linux[10.2.0.1.0]下安裝的都沒有問題,只有aix下會出現這樣的問題,懷疑只有oracle10.0.2.0.1的aix發行版本纔有這個bug。



已有 0 人發表留言,猛擊->>這裏<<-參與討論


JavaEye推薦
相關文章
相關標籤/搜索