/etc/resolv.conf 導致 oracle 11g TNS解析緩慢甚至 TNS-12547 Linux Error: 104

spectre2發表於2015-08-10
近一段時間,客戶經常會報登入系統出亂碼,我們看了一下,一般是TNS的問題,查了一下伺服器的監聽日誌,發現客戶出問題是經常報:tns

然後lsnrctl status 檢視監聽狀態,經常卡住一段時間,報:
TNS-12547: TNS:lost contact
 TNS-12560: TNS:protocol adapter error
  TNS-00517: Lost contact
   Linux Error: 104: Connection reset by peer

在tnsping的過程當中發現卡住位置是在
Used TNSNAMES adapter to resolve the alias
之前,那麼問題應該是出在使用tnsnames解析之前,
在網上搜尋資料,發現問題出在/etc/resolv.conf檔案上:
使用了nameserver 解析。
如果配置了nameserver,那麼oracle就要先驗證nameserver,失敗超時之後才會用別的辦法連線。而監聽的域名實際上是伺服器自己定義的,在nameserver 中肯定是解析不到的。

2015.08.26:最近發現,可以設定dns的解析超時時間,如下:
/etc/resolv.conf檔案中新增:
options timeout:1 attempts:1 rotate

問題解決。
2015.09.11:08.26發現的解析超時時間的設定,只能延緩問題發生的頻率,其它包括設定sqlnet.authentication_services ,設定INBOUND_CONNECT_TIMEOUT_listener = 0等方式都測試過,剛開始確實能穩定一段時間,但隨著時間推移,負載的提升,問題還是會重現,目前測試唯一有效的方法就是註釋掉/etc/resolv.conf檔案。
一般來說,伺服器不需要DNS解析,但也有一些特殊應用,會用到DNS,我們公司的一個應用就需要DNS解析來做域名判斷,現在只能改hosts檔案,運維工作一下子提升了好多。。。

PS.請知道其它解決方案的朋友不吝賜教,感激不盡!!
2015.09.17:最近一直在研究這個問題,發現這是oracle的一個bug:bug 9593134

Bug 9593134 - DNS or NIS mis-configuration can cause slow database connects (文件 ID 9593134.8)

APPLIES TO:Oracle Net Services - Version 1.0.2.4.0 to 11.2.0.1
Information in this document applies to any platform.
DETAILS Bug 9593134  DNS or NIS mis-configuration can cause slow database connects This note gives a brief overview of bug 9593134. 
 The content was last updated on: 27-MAR-2012


可以看到問題出在即使TNSNAMES.ORA你使用IP地址,任然會進行解析,並且首先會去嘗試通過resolv.conf中的配置進行解析,當一個地址不可達時就會出現等待,然後才會使用HOSTS檔案。 此問題在11.2.0.2修復,影響11.1.0.7和11.2.0.1,解決登出掉/etc/resolv.conf類容即可,或者安裝補丁程式 bug 9593134

解決方案來源:https://community.oracle.com/message/4491745
http://www.askmaclean.com/archives/dns%E8%AE%BE%E7%BD%AE%E5%BC%95%E8%B5%B7%E7%9A%84%E7%99%BB%E5%BD%95%E5%BB%B6%E8%BF%9F.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14184018/viewspace-1766904/,如需轉載,請註明出處,否則將追究法律責任。

相關文章