ORA-12500: TNS:listener failed to start a dedicated server process 表明監聽器嘗試為新連線啟動專用伺服器進程失敗,最常見原因是**作業系統層面記憶體不足**或 **Oracle 進程記憶體限制**。本文記錄真實案例:4GB 實體記憶體、1.5GB SGA、300+ 併發 Session 導致 503 錯誤,並提供三級解決方案。
/3GB 開關ORA-12500、ORA-01034、ORA-27100/3GB 則仍為 2GB)_ksmg_granule_size 相關)-- 修改 init.ora / spfile
sga_target = 1G -- 從 1.5GB 降至 1GB
-- 或手動調整共用池、DB 快取等組件
SHUTDOWN IMMEDIATE;
STARTUP;
效果:騰出 500MB 給 PGA/OS,300 Sessions 穩定運行,錯誤即時消失。
使用 orastack 工具調整執行緒堆疊保留大小 (預設 1MB):
C:\oracle\ora81\bin> orastack oracle.exe 500000
C:\oracle\ora81\bin> orastack tnslsnr.exe 500000
-- 將 Reserved Memory per Thread 從 1,048,576 降至 500,000 bytes
-- 重啟 OracleServiceSID 與 OracleTNSListener 服務
風險:堆疊過小可能導致深度遞迴/大型 PL/SQL 套件執行時堆疊溢位 (ORA-07445)。必須在測試環境壓測驗證。
/3GB (需 Enterprise/Standard Edition 支援),重啟 OSORACLE_HOME/bin/relink all 使 Oracle 感知 3GB 空間V$SESSTAT / V$PROCESS_MEMORY (10g+) 監控 Session PGA 使用量V$SGAINFO / V$SGA_DYNAMIC_COMPONENTS 監控 SGA 組件分佈MEMORY_TARGET/MEMORY_MAX_TARGET (11g+ AMM) 讓 Oracle 自動管理 SGA/PGA 總量記憶體壓力導致的 ORA-12500 是典型的「容量規劃缺失」症狀,以「降 SGA 止血 → 64-bit 遷移根治 → 架構優化防復發」三步走,可徹底消除此類風險。