首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle TNS 錯誤深度解析:TNS-00510、TNS-12500、TNS-12540、TNS-12560 綜合排查案例

     編輯:Oracle 資料庫基礎

錯誤代碼與官方定義

在 Oracle 網路層中,以下四個 TNS 錯誤常同時出現,指向同一類資源耗盡問題:

  • TNS-00510:Internal limit restriction exceeded — 同時開啟的檔案或 Socket 過多,或其他系統資源耗盡。
  • TNS-12500:TNS:listener failed to start a dedicated server process — 專用伺服器進程啟動失敗,可執行檔不存在或環境配置錯誤。
  • TNS-12540:TNS:internal limit restriction exceeded — 同時開啟的 TNS 連線過多。
  • TNS-12560:TNS:protocol adapter error — 通用協議適配器錯誤,需檢查錯誤堆疊中的底層傳輸錯誤。

真實案例:AIX 平台與 Windows 2000 平台的對比

問題現象

監聽日誌中大量出現上述錯誤,伴隨作業系統錯誤 IBM/AIX RISC System/6000 Error: 11: Resource temporarily unavailable 或 32-bit Windows Error: 8: Exec format error。伺服器配置:每用戶最大進程數 600,Oracle processes 參數設為 600,實際進程峰值 482,Session 峰值 490,sessions 參數設為 840。表面上資源尚有餘裕,但連線仍失敗。

根因分析

TNS-00510 明確指出:作業系統層面的檔案/ Socket 限制或記憶體分頁空間不足,而非 Oracle 參數限制。 Oracle processes 僅限制專用伺服器進程,尚不包含背景進程(SMON、PMON、LGWR 等)、平行查詢進程、監聽器進程等。AIX/Windows 預設的每用戶進程數、檔案描述符、記憶體分頁空間均可能成為瓶頸。

Windows 2000 + Oracle 8.1.6 獨占模式案例詳解

環境參數

processes = 1000
shared_pool_size = 240000000
db_block_buffers = 90000
db_block_size = 4096
sort_area_size = 65536
open_cursors = 100
max_dump_file_size = 10240
...

故障現象

並發用戶達 700+ 時,新連線報 ORA-12560、ORA-03114,舊連線正常。重啟後 750+ 並發再次發生。警告日誌無錯誤,listener.log 大量記錄 TNS-12500/12540/12560/00510 及 32-bit Windows Error: 8。

原因:32 位 Windows 2GB 使用者模式地址空間耗盡

  • 4GB 物理記憶體,32 位 Windows 僅能給單一進程分配 2GB 虛擬記憶體。
  • SGA 約 600MB,獨占模式下每 Session 約佔 2MB PGA(含排序區、雜湊區、游標、Oracle 堆疊、TNS 堆疊)。
  • 750 Session × 2MB ≈ 1.5GB + SGA 600MB ≈ 2.1GB > 2GB 限制,導致無法建立新進程。

解決方案:使用 orastack 縮減執行緒堆疊保留記憶體

  1. 停止 OracleServiceSID 與 OracleTNSListener 服務。
  2. 執行命令:
    orastack oracle.exe 500000
    orastack tnslsnr.exe 500000
    將每執行緒保留記憶體從 1MB(1048576 bytes)降至 500KB(500000 bytes)。
  3. 重啟服務,測試並發連線達 1350+ 正常。

其他可行方向

  • 縮減 SGA、sort_area_size、hash_area_size、open_cursors、job_queue_processes、parallel_max_servers。
  • 改用 MTS(共享伺服器)模式大幅降低 PGA 總量。
  • 升級 64 位作業系統或啟用 /3G 開關、PSE36 / AWE 機制突破 2GB 限制。

總結

TNS-00510/12540 核心提示:作業系統資源(檔案描述符、進程數、虛擬記憶體)耗盡。排查步驟:

  1. 確認 OS 限制(ulimit -n、maxuproc、分頁空間、32 位進程地址空間)。
  2. 評估 Oracle 進程總數 = processes + 背景進程 + 平行進程 + 監聽器。
  3. 若為 32 位 Windows 獨占模式,優先考慮 orastack 縮減堆疊或遷移至 MTS/64 位平台。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved