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

如何判斷 Oracle 連接模式:專用伺服器 vs 共享伺服器

     編輯:Oracle 資料庫相關知識

Oracle 連接模式由伺服器端參數與客戶端 TNS 設定共同決定。本文以決策矩陣快速釐清四種組合下的實際連接模式,並提供驗證 SQL。

決策矩陣

DB 參數
SHARED_SERVERS
TNS 設定
SERVER=
實際連接模式說明
= 0 (預設)未設定 或 SHAREDDEDICATED無共享伺服器進程,強制專用
= 0DEDICATEDDEDICATED顯式指定專用
> 0DEDICATEDDEDICATED客戶端強制覆蓋為專用
> 0未設定 或 SHAREDSHARED (MTS)啟用共享伺服器架構

關鍵參數

  • SHARED_SERVERS:初始共享伺服器進程數,>0 即啟用 MTS。
  • MAX_SHARED_SERVERS:最大共享伺服器進程數上限。
  • DISPATCHERS:調度器配置,格式 (PROTOCOL=TCP)(DISPATCHERS=3),必須配置否則共享模式無法建立連接。
  • LOCAL_LISTENER:供 Dispatcher 註冊的監聽地址。

客戶端 TNSNAMES.ORA 範例

-- 強制專用連接(推薦生產環境預設)
ORCL_DEDICATED =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = db-host)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
      (SERVER = DEDICATED)
    )
  )

-- 允許共享連接(需 DB 端 SHARED_SERVERS > 0)
ORCL_SHARED =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = db-host)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
      (SERVER = SHARED)
    )
  )

驗證當前會話連接模式

-- 方法 1:查詢 V$SESSION
SELECT sid, serial#, username, server, program
FROM v$session
WHERE sid = SYS_CONTEXT('USERENV', 'SID');

-- SERVER 欄位:DEDICATED / SHARED / NONE

-- 方法 2:查詢 V$PROCESS 關聯
SELECT s.sid, s.serial#, s.username, s.server, p.spid, p.program
FROM v$session s
JOIN v$process p ON s.paddr = p.addr
WHERE s.sid = SYS_CONTEXT('USERENV', 'SID');

-- 方法 3:查詢共享伺服器統計
SELECT * FROM v$shared_server;
SELECT * FROM v$dispatcher;
SELECT * FROM v$queue;

選型建議

場景推薦模式理由
高併發、短連接、OLTP、連接池完善SHARED減少 OS 進程數、節省 PGA 記憶體、提升連接建立速度
長事務、大排序/雜湊、Parallel Query、LOB 操作DEDICATED避免共享伺服器阻塞、PGA 獨享、效能穩定
RAC 環境、Data Guard、GoldenGateDEDICATED避免 Dispatcher 故障影響全叢集、簡化故障域
舊應用無連接池、頻繁建立/斷開連接SHARED緩解「連接風暴」導致的 OS 進程耗盡

現代架構下,預設使用 DEDICATED + 應用層連接池 是最穩健選擇。僅在明確評估後、且具備完整 MTS 監控體系時,才考慮啟用 SHARED SERVERS。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved