天天看點

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

目錄

監聽狀态正常,應用回報時斷時連

listener程序crash

ora-12514 tns 監聽程式目前無法識别連接配接描述符中請求服務

11g scan listener無法注冊服務故障

listener hang

tns-12535 tns-00505處理

應用測試連接配接不上資料庫,連接配接直接報tns-12547: tns:lost contact處理

由oracle的listener引起的報錯很多,很大一部分是由于配置不當導緻的。通常,我們要麼從tnsnames.ora找原因,要麼從lisntener.ora找原因。基本上,我們從oracle連接配接的時候報出的錯誤代碼可以快速查到原因。

下面介紹的幾類故障及處理方法,難度稍微要大一些

故障現象:

用戶端新發起的短連接配接時斷時連,如下所示:

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

故障原因:

因短連接配接持續性發起連接配接耗盡監聽ip 1521端口資源,導緻監聽無法正常處理連接配接請求。

超過每秒50次連接配接則需要關注,可通過tail -20f listener.log 觀察,如持續性快速刷屏則可能已經出現連接配接風暴.

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

故障解決/日志分析:

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

故障環境:

作業系統為:sunos 5.10

資料庫版本:oracle 10.2.0.4

故障現象:

listener程序已經crash, 檢視主機資料庫監聽日志listener_ngsetdb3/4.log如下:

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

系統日志:

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

故障分析:

listener程序crash是由于ipmp出現故障所緻,listener随後在探測不到服務節點時,直接crash。oracle mos文章solaris cluster 3.x: ipmp group failure impact [id 1006916.1]對此有較長的描述:在sun cluster中,短暫的網絡故障會導緻ipmp組失敗,并觸發資源組切換。并且,它會在38秒後回切!

處理方法:

檢視監聽日志listener.log跟系統日志(/var/adm/ messages)。

手動重新開機兩個節點的listener,oracle提供了一個解決方案:修改/etc/default/mpathd檔案下的ipmp failure_detection_time變量值,即将失敗檢測時間從預設的10秒(10000)增加到20秒(20000)以上

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

注:修改該參數需要重新開機mpathd服務。

用戶端無法通過監聽連接配接資料庫

故障原因:

1.執行個體未注冊到listener中,可通過lsnrctl status 檢視

2.oracle process達到上限無法建立新的連接配接。

故障解決:

手工注冊資料庫,alter system register;

檢查資料庫使用者連接配接分布情況,并show process 檢視連接配接限制

select username,count(1) from v$session group by username order by 2 asc;

 ps :大部分情況由開發商程式bug引起。

scan listener 無法注冊service服務

bug 13066936

故障解決:

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

任意環境

從其他應用主機tnsping發現延遲很大

檢視監聽狀态報如下錯:

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

listener.log有如下報錯:

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

故障分析:

too many open files意味着maximum number of open files per process 達到了上限。是以listener hang住的原因是該limit設定過小。

将oracle使用者的soft limit提升為至少1024,然後重新oracle使用者登入,檢驗ulimit合格後,重新啟動資料庫和監聽。

具體解決辦法如下:

在/etc/system增加以下行

set rlim_fd_max=65536

set rlim_fd_cur=4096

重新登入oracle并檢驗oracle使用者的限制

su – oracle

ulimit -ha

ulimit –sa

重新啟動資料庫和監聽

db alert日志報如下錯誤:

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

一個用戶端連接配接整個步驟:

用戶端發起一個connection連接配接監聽

監聽啟動一個專屬程序(伺服器程序,也就是我們通常說的loca=no程序)用于接收這個connection

在專屬程序啟動之後,監聽會将這個connection傳遞給這個專屬程序

專屬程序通過這個connection來跟用戶端握手

專屬程序跟用戶端資訊交換需要建立一個session

session打開

當在以上的第3步到第4步時用戶端關閉,是以當專屬程序嘗試跟用戶端聯系時發現連接配接已關閉時,就會報出我們看到的錯誤!!

錯誤一般是由于程式異常斷開導緻逾時,11g r1如果出現如上的錯誤資訊會寫入到sqlnet.log,11g r2會寫入到alert.log,

其實出現此錯誤是正常的現象。

如果不想這樣的資訊列印在alert日志中,

在sqlnet.ora設定

diag_adr_enabled = off

在listener.ora設定

diag_adr_enabled_ = off

重新開機監聽

環境:hp-ux 11.31 ia64

資料庫版本:11.2.0.4

應用測試連接配接不上資料庫,連接配接直接報tns-12547: tns:lost contact。

但檢視監聽狀态,crs狀态,資料庫狀态均正常。crs日志、css日志及agent日志均無報錯。

應用連接配接資料庫直接報tns-12547: tns:lost contact

監聽日志發現一直在報連接配接失敗:

Oracle常見故障——Listener類:Hang、Crash及連接配接風暴的判斷

問題導緻的原因有在32位平台中當listener.log超過2g會報這個錯。

oracle_home下的一些執行檔案權限不對也會導緻相同的錯誤,但我們這個是64位的,排除第一種,

是以去查詢執行檔案的權限是否正常。

1、 通過對比發現部分執行檔案少了s權限,做了relink all,重新同步執行檔案

2、 由于資料庫使用的是asm,磁盤屬組為asmadmin,故對比問題節點及正常節點db oracle_home下屬組為asmadmin的檔案,将問題節點檔案權限修正即可解決問題。

<b>本文來自雲栖社群合作夥伴"dbaplus",原文釋出時間:2015-12-23</b>