首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 修改最大連接數:SPFILE 參數調整與驗證步驟

     編輯:Oracle 資料庫相關知識

連線數耗盡導致 ORA-12516: TNS:listener could not find available handler 或 ORA-00018: maximum number of sessions exceeded。本文說明透過修改 SPFILE 參數 PROCESSES / SESSIONS 調整最大連接數,含檔案定位、參數修改、重啟驗證完整流程。

錯誤現象

監聽程序無法為請求的服務類型找到可用的處理程序
ORA-12516 / ORA-00018

定位參數檔

  • Windows:%ORACLE_HOME%\database\SPFILE<SID>.ORA (如 SPFILEORCL.ORA)
  • Linux/Unix:$ORACLE_HOME/dbs/spfile<SID>.ora
  • 若無 SPFILE,檢查 init<SID>.ora

修改參數 (以 SPFILE 為例)

-- 1. 以 SYSDBA 登入確認目前值
SHOW PARAMETER PROCESSES;
SHOW PARAMETER SESSIONS;

-- 2. 修改 SPFILE (靜態參數,需重啟)
ALTER SYSTEM SET PROCESSES = 1500 SCOPE = SPFILE;
ALTER SYSTEM SET SESSIONS = 2250 SCOPE = SPFILE; -- 建議 = PROCESSES * 1.5 + 22

-- 3. 重啟資料庫生效
SHUTDOWN IMMEDIATE;
STARTUP;

-- 4. 驗證新值
SHOW PARAMETER PROCESSES;
SHOW PARAMETER SESSIONS;

參數關係與計算建議

參數預設值建議設定說明
PROCESSES150業務峰值連線數 + 背景程序 + 余量OS 程序上限,靜態參數
SESSIONSPROCESSES*1.5+22PROCESSES * 1.5 + 22衍生自 PROCESSES,靜態參數
TRANSACTIONSSESSIONS*1.1SESSIONS * 1.1衍生自 SESSIONS

驗證當前連線使用情況

-- 當前會話數
SELECT COUNT(*) FROM V$SESSION;

-- 當前進程數
SELECT COUNT(*) FROM V$PROCESS;

-- 歷史峰值 (需啟用审计或 AWR)
SELECT MAX(CURRENT_UTILIZATION) FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME = 'processes';

監聽器端連線限制 (次要)

若資料庫參數已足夠但仍報錯,檢查 listener.ora:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = orcl)
      (ENVS = "PROCESSES=1500")  -- 可選,傳遞給專用服務器
    )
  )

最佳實務建議

  • 監控 V$RESOURCE_LIMIT 設定告警閾值 (如 80%)
  • 連線池設定 MAX_POOL_SIZE 低於資料庫 PROCESSES 80%
  • 定期檢視 DBA_HIST_RESOURCE_LIMIT (AWR) 規劃擴容
  • 12c+ 可考慮 THREADED_EXECUTION=TRUE 降低 OS 程序消耗
核心原則:PROCESSES/SESSIONS 為靜態參數,**修改必須重啟**。生產環境變更需納入變更管理、預留維護窗口、驗證回滾方案。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved