| 概念 | 定義 | 關係 |
| Connection (連線) | Client Process 與 Oracle Instance 間的**物理路徑** (網路連線/IPC) | 一條連線可對應 0~N 個 Session |
| Session (會話) | 資料庫內的**邏輯實體**,承載 Session State (記憶體結構) | 可獨立於 Connection 存在 (Connection Pooling 場景) |
實證:單一連線、雙 Session (Autotrace 機制)
初始狀態:一條連線、一個 Session
SQL> SELECT USERNAME, SID, SERIAL#, SERVER, PADDR, STATUS FROM V$SESSION WHERE USERNAME='SYS';
USERNAME SID SERIAL# SERVER PADDR STATUS
SYS 153 27 DEDICATED 3621B264 ACTIVE
PADDR 為專用伺服器進程位址。
開啟 Autotrace 後:同一連線、雙 Session
SQL> SET AUTOTRACE ON STATISTICS
SQL> SELECT USERNAME, SID, SERIAL#, SERVER, PADDR, STATUS FROM V$SESSION WHERE USERNAME='SYS';
USERNAME SID SERIAL# SERVER PADDR STATUS
SYS 152 88 DEDICATED 3621B264 INACTIVE -- Autotrace 監控 Session
SYS 153 27 DEDICATED 3621B264 ACTIVE -- 實際工作 Session
- 兩 Session 共用同一 PADDR → 同一專用伺服器進程
- OS 層面 無新增進程,驗證一連線一進程
- Autotrace 原理:建立輔助 Session,查詢
V$SESSTAT 記錄初始統計 → 執行 DML → 再查統計差值產出報告
DISCONNECT vs EXIT:連線與 Session 的生命週期
SQL> DISCONNECT -- 僅銷毀所有 Session,物理連線保留 (進程仍在)
SQL> SELECT USERNAME, PROGRAM FROM V$PROCESS WHERE ADDR = HEXTORAW('3621B264');
USERNAME PROGRAM
ORACLE ORACLE@DB1 (TNS V1-V3) -- 進程仍存在
SQL> CONNECT / AS SYSDBA -- 同一物理連線建立新 Session
SQL> SELECT USERNAME, SID, SERIAL#, SERVER, PADDR, STATUS FROM V$SESSION WHERE USERNAME='SYS';
USERNAME SID SERIAL# SERVER PADDR STATUS
SYS 158 34 DEDICATED 3621B264 ACTIVE -- 新 SID,同 PADDR
DISCONNECT = DESTROY_ALL_SESSIONS,非真正斷開連線
EXIT 才會完全撤銷物理連線 (進程終止)
CONNECT = CREATE_SESSION,在現有進程建立新 Session
總結
- 專用伺服器:簡單、隔離性好、進程數隨連線數線性增長
- 共享伺服器:支援高併發連線、進程池複用、需調度器、UGA 在 SGA
- Connection ≠ Session:一連線多 Session、Session 可存活於連線之外
- Autotrace、Connection Pooling 皆利用「連線與 Session 分離」特性
- 上一篇文章: Oracle VPD (虛擬專用資料庫) 實戰完整教學:Context、Policy Function 與 DBMS_RLS 策略應用
- 下一篇文章: Oracle 背景進程全景圖:核心進程 (PMON/SMON/DBWn/LGWR...) 與工具進程 (Job Queue/AQ/ASMM/RAC) 完整分類詳解
Copyright ©
程式碼之家 All Rights Reserved