前幾天收到一位讀者朋友的來信,詢問以下問題:
在我的監聽日志中出現錯誤TNS-12502: TNS:listener received no CONNECT_DATA from clIEnt
經過查找資料了解到這種錯誤應該是客戶端tnsnames.ora中沒有寫 CONNECT_DATA的原因,我檢查過客戶端的機器沒有發現問題。
目前的現象:
1、每幾分鐘出現一次該錯誤(見附件),即使是在凌晨的時候也是,這段時間我們沒有開發人員在凌晨時候使用Oracle。
2、到目前為止也沒有發現客戶端機器不能正常連接數據庫的情況。
今天才有時間研究一下,對於TNS-12502錯誤,Oracle的解釋如下:
Error: ORA-12502 / TNS-12502
Text: TNS:listener received no CONNECT_DATA from clIEnt
Cause: No CONNECT_DATA was passed to the listener.
Action: Check that the service name resolved from TNSNAMES.ORA has the
CONNECT_DATA component of the connect descriptor.
也就是說只有在TNSNAMES.ORA文件中不包含CONNECT_DATA時會出現此問題。
那麼當通過一些網絡工具或HA工具等檢測監聽器端口時,日志中就可能記錄如上錯誤。我們可以簡單模擬一下,在客戶端通過telnet數據庫服務器的1521端口測試連通性:
C:>telnet 172.16.30.11 1521
此時在日志中就會記錄如下信息:
TNS-12502:
TNS:listener received no CONNECT_DATA from clIEnt
09-AUG-2006 16:21:03 * 12502
TNS-12502: TNS:listener received no CONNECT_DATA from clIEnt
09-AUG-2006 16:21:13 * 12502
TNS-12502: TNS:listener received no CONNECT_DATA from clIEnt
09-AUG-2006 16:21:22 * 12502
TNS-12502: TNS:listener received no CONNECT_DATA from clIEnt
如果客戶端都正常的話,此類錯誤並不會影響應用,當然也可以徹底檢查找出根本原因。