前幾天收到一位讀者朋友的來信,詢問以下問題:
在我的監聽日誌中出現錯誤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
如果用戶端都正常的話,此類錯誤並不會影響應用,當然也可以徹底檢尋找出根本原因。