官术网_书友最值得收藏!

2.3 數據庫連接(connection)與會話(session)

連接與會話是Oracle數據庫中容易混淆的兩個概念,它們是緊密相關的兩個概念。下面講解它們的區別,給出實際的例子以幫助讀者更好地理解它們的概念。

2.3.1 數據庫連接(connection)

連接指用戶進程與數據庫服務器之間的通信途徑,一個連接可以有多個對話。Oracle提供了如下三種數據庫連接方式,以滿足用戶不同的連接需求。

● 基于主機的方式(Host-Based):此方式中,服務器和客戶端運行在同一臺計算機上,用戶可以直接連接數據庫服務器。

● 基于客戶機_服務器的方式(Client-Server):該方式中數據庫服務器和客戶端運行在不同的計算機上,客戶通過網絡連接數據庫服務器。在DBA的日常維護中,會經常使用這種方式訪問數據庫,實現數據庫的遠程維護。

● 用戶-應用服務器-數據庫服務器方式(Client-Application Server-Server):這種方式被稱為三層訪問模式,用戶首先訪問應用服務器,然后由應用服務器連接數據庫服務器,應用服務器就如一個中介,完成客戶和數據庫的交互。在很多應用系統中,客戶的應用程序往往通過三層方式訪問數據庫,如應用服務器為IIS或Apache服務器等。

2.3.2 會話(session)

會話指一個明確的數據庫連接。在2.3.1小節中講解了用戶與數據庫服務器建立連接的三種方式,一旦用戶采用一種連接方式,我們把這樣的連接稱為一個會話。

如用戶通過某種工具如SQL*PLUS在專用連接的情況下訪問數據庫,在輸入的用戶名和密碼經過服務器驗證后,服務器就會自動創建一個與該用戶進程對應的服務器進程,二者是一對一的關系,這里服務器進程就像用戶進程的代理,代替用戶進程像數據庫服務器發出各種請求,并把從數據庫服務器獲得的數據返回給用戶進程。但用戶退出或發生異常時(操作系統重啟)會話結束。

注意

剛才指出“專有連接”的概念,專有連接是一種連接類型,指用戶和服務器進程之間是一對一的關系。而在共享服務器配置的情況下,多個用戶進程可以同時共享服務器進程,此時就不是專有連接,而是多對一的關系。

一個用戶可以并發地建立多個會話,例子2-1就是用戶sys同時在專有連接的情況下建立兩個會話的例子。

例子2-1 用戶SYS通過專有連接建立兩個會話

    SQL>SELECT serial#,username,status,server,process,program,logon_time
      2* FROM v$session
    SERIAL# USERNAME STATUS  SERVER   PROCESS   PROGRAM   LOGON_TIME
    ----------- -------------------- ----------- ----------------- ---------------- --------------- ----------------------
          1            ACTIVE   DEDICATED 2172      Oracle.EXE      17-5月 -09
          1            ACTIVE   DEDICATED 528       Oracle.EXE      17-5月 -09
          1            ACTIVE   DEDICATED 2188      Oracle.EXE      17-5月 -09
          1            ACTIVE   DEDICATED 408       Oracle.EXE      17-5月 -09
          1            ACTIVE   DEDICATED 1424      Oracle.EXE      17-5月 -09
          1            ACTIVE   DEDICATED 1244      Oracle.EXE      17-5月 -09
          1            ACTIVE   DEDICATED 2264      Oracle.EXE      17-5月 -09
          3 SYS        ACTIVE   DEDICATED 540:1644   sqlplus.exe         17-5月-09
          7 SYS        ACTIVE   DEDICATED 1296:1848  sqlplusw.exe       17-5月-09
    
    已選擇9行。

在例子2-1的輸出中我們同時使用兩個SQLPLUS工具連接數據庫,并且使用同一個用戶SYS,可以看到最后兩行顯示有兩個活躍(ACTIVE)的會話,一個會話是使用sqlplus.exe程序建立的,一個是使用sqlplusw.exe程序建立的。

說明

在上述查詢中,只是演示一個用戶可以建立多個連接,使用相同或不同的工具登錄。至于v$session(數據字典視圖),讀者暫且把它看成是一張表,表中存儲了當前會話的信息,如屬性USERNAME是用戶登錄名,屬性PROGRAM是用戶登錄工具(一個用戶進程)。

圖2-4清晰地說明了連接與會話之間的區別和聯系。

圖2-4 連接與會話示意圖

說明

一個連接可以對應多個對話,連接僅僅是一種通信途徑,如通過Socket建立通信,但是一個用戶可以啟動多個進程通過一個連接建立多個對話,這里服務器進程就像是用戶進程的代理一樣,與服務器交互完成數據的各種操作。

主站蜘蛛池模板: 精河县| 博兴县| 吉木乃县| 泾源县| 开鲁县| 台东市| 华阴市| 苍梧县| 如皋市| 昆山市| 始兴县| 南平市| 成安县| 葵青区| 桃江县| 泰和县| 开鲁县| 乐安县| 策勒县| 洞头县| 宜君县| 乐昌市| 南投县| 莲花县| 九龙坡区| 西吉县| 松原市| 扬州市| 彩票| 安阳县| 镇康县| 澜沧| 望都县| 泰顺县| 绩溪县| 南城县| 平舆县| 新田县| 个旧市| 佛山市| 射阳县|