| 錯誤代碼 | 含義 | 常見成因 | 排障建議 |
|---|---|---|---|
| TNS-00510 | Internal limit restriction exceeded | 同時打開文件/套接字過多,或其他資源耗盡 | 啟用 ADMIN 級跟蹤分析協議細節;檢查系統打開文件限制 (ulimit -n) |
| TNS-12500 | Listener failed to start dedicated server process | 可執行文件缺失、環境變量錯誤、權限不足 | 啟用 ADMIN 跟蹤;驗證 Oracle 可執行文件存在且有執行權限;檢查 LISTENER.ORA 環境變量設置;確認協議適配器已正確鏈接 |
| TNS-12540 | TNS: internal limit restriction exceeded | 同時 TNS 連接過多 | 等待連接釋放後重試;評估是否需調大 PROCESSES/SESSIONS 參數 |
| TNS-12560 | TNS: protocol adapter error | 通用協議適配器錯誤 | 檢查地址協議規範;查看錯誤堆疊尋找底層傳輸錯誤;啟用跟蹤複現分析 |
答案:是的。 當作業系統進程數達到上限(ulimit -u 或內核 pid_max),或 Oracle 實例參數 PROCESSES/SESSIONS 觸頂時,監聽器無法 fork 新的專用服務器進程,導致 TNS-12500 或 TNS-12540。
ulimit -a 檢查用戶進程、文件描述符軟/硬限制;cat /proc/sys/kernel/pid_max 檢查系統級 PID 上限;ps -ef | grep oracle | wc -l 統計當前 Oracle 進程數;SELECT * FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME IN ('processes','sessions'); 檢視資料庫參數使用率;$ORACLE_HOME/network/log/listener.log 分析連接拒絕模式;TRACE_LEVEL_LISTENER = ADMIN、TRACE_FILE_LISTENER = listener.trc。PROCESSES 設定為 (預期最大並發用戶 + 背景進程) × 1.2;SESSIONS = PROCESSES × 1.1 + 5;/etc/security/limits.conf 設置 oracle soft nproc 65535、oracle hard nproc 65535、oracle soft nofile 65535、oracle hard nofile 65535;SQLNET.EXPIRE_TIME = 10 (分鐘) 啟用 DCD;建立「OS 資源 → 實例參數 → 監聽器 → 應用連接池」四層防護體系,從根源消除進程耗盡導致的 TNS 連接風暴。