Oracle中Session介紹

通俗來講,session 是通信雙方從開始通信到通信結束期間的一個上下文(context)。這個上下文是一段位於服務器端的內存:記錄了本次連接的客戶端機器、通過哪個應用程序、哪個用戶在登錄等信息[在pl/sql developer中,通過Tools-->Sessions可以查看當前數據庫的session]。session 是和connection同時建立的,兩者是對同一件事情不同層次的描述。簡單講,connection是物理上的客戶機同服務器段的通信鏈路,session是邏輯上的用戶同服務器的通信交互。

oracle中一個用戶登錄oracle服務器的前提,就是該用戶具有oracle的 “create session”權限。oracle允許同一個用戶在同一個客戶機上建立多個同服務器的連接,這一點從oracle的視圖V$session中可以看到[select * from v$session;]。每個session都代表了用戶與服務器的一個交互。就像兩個國家之間可以同時開展很多談判,經濟的,環境的等等。關閉了有關經濟的談判,不會影響到環境談判的進行。後臺進程PMON會每隔一段時間,就會測試用戶連接狀況,如果連接已斷開,PMON會清理現場,釋放相關的資源。

在具體的應用場景中connction 和 session 有很多情況:
1. sqlplus 登錄 oracle

這種場景比較容易理解,一個連接對應一個session。

2. 其他客戶端工具登錄oracle
比如:pl/sql developer 登錄oracle。pl/sql developer 可以設置是否每個窗口共用同一個session. 如果想在調試窗口調試存儲過程或函數,則必須設置爲共享session。如果設置爲非共享, 則每次打開一個操作窗口,pl/sql developer 會利用最初輸入的帳戶和口令建立新的connection 和 session.

3. IIS 用程序登錄oracle
這種情況下,其實是IIS在登錄oracle。connection 和 session 的建立情況和iis機制相關。(以下是參考了網友的觀點,文章來源:http://www.cnblogs.com/)
“對於Oracle來說,安全的Sessions數應該爲Sessions = (IIS process number) * (min pool size)。”
IIS進程:在IIS6.0中,採用了新的進程隔離模式來響應用戶的請求,在IIS管理器中,可以設置應用程序池的最大進程數。對於新的WEB應用請求,IIS進程管理器會啓動多個W3wp.exe進行響應。

4、 其他情況 有待各路英雄補充

orcale的session內存
oracle 的連接分爲兩種:獨佔式,共享式。
在獨佔式連接情況下,session(如遊標,排序去,sql區)是在PGA中分配的。
在共享式連接情況下,session的一部分(如UGA)是在中SGA的larg pool中分配的。

oracle session 和process
oracle中每個process 都有對應的session。
process 分爲
用戶進程在V$session 中可用條件:$session.type = ‘USER’.查詢。
後臺進程在V$session 中可用條件:$session.type = ‘BACKGROUND’查詢。

常見的後臺進程:
SMON,PMON,DBWR,LGWR,MMAN,MRP, RFS,RECO,CKPT,ARCH,Dnnn,Snnn,LMON,LMD0,QMNn,TRWR,WMON,LCKnnn,SNPnnn, MMON,DMON,SNP

session 相關的初始化參數:
process:oracle的連接數(sessions)與其參數文件中的進程數(process)相關,它們的關係如下:sessions=(1.1*process+5),我們可以通過修改inia.ora的這個process參數在更改可連接的最大session數。
workarea_size_policy:PGA用手動管理還是自動管, 在AUTO的時候每個session最多能用到5%或100M.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章