- Oracle DBA基礎教程
- 林樹澤
- 1243字
- 2021-03-26 13:21:39
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建立通信,但是一個用戶可以啟動多個進程通過一個連接建立多個對話,這里服務器進程就像是用戶進程的代理一樣,與服務器交互完成數據的各種操作。
- Mastering Selenium WebDriver
- Getting Started with PowerShell
- MATLAB 2020 從入門到精通
- TypeScript實戰指南
- CKA/CKAD應試教程:從Docker到Kubernetes完全攻略
- Oracle從入門到精通(第5版)
- 硅谷Python工程師面試指南:數據結構、算法與系統設計
- HTML+CSS+JavaScript網頁設計從入門到精通 (清華社"視頻大講堂"大系·網絡開發視頻大講堂)
- Django實戰:Python Web典型模塊與項目開發
- PrimeFaces Blueprints
- Java多線程并發體系實戰(微課視頻版)
- Clojure Data Structures and Algorithms Cookbook
- 計算機應用基礎(Windows 7+Office 2010)
- 青少年Python趣味編程
- Learning Apache Thrift