當執行 tnsping 指令時出現高延遲(如 266,310 毫秒),甚至逾時失敗,通常是因為 Listener 日誌檔案過大導致。本文提供快速診斷與解決方案。
E:\s01\app\oracle\product\11.2.0\dbhome_1\BIN>tnsping CENORCL
TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 25-MAY-2015 10:26:59
...
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = W01SQL0601.pharmatechs.com)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = cenorcl)))
OK (266310 msec)
回應時間高達 266 秒,明顯異常。
Oracle Listener 預設將所有連線嘗試記錄至 listener.log。當該檔案大小超過 4GB(32 位元系統限制)或檔案系統無法高效處理巨型檔案時,Listener 寫入日誌會產生嚴重阻塞,導致新連線請求處理緩慢,進而引發 TNSPING 高延遲。
lsnrctl stoplistener.log(路徑通常在 $ORACLE_HOME/network/log/ 或 $ADR_BASE/diag/tnslsnr//listener/trace/ ):rm listener.log 或 mv listener.log listener.log.baklsnrctl start執行完成後,再次執行 tnsping 即可恢復正常毫秒級回應。
listener.ora 中設定 LOGGING_LISTENER = OFF 關閉非必要日誌,或配置 ADR 自動清理策略(DIAG_ADR_ENABLED = ON)。