--========================
-- 進程、會話、串連之間的差異
--========================
在使用Oracle database的時候,串連與會話是我們經常碰到的詞語之一。咋一看貌似一回事,事實則不然。一個串連上可以建立零個、
一個、甚至多個會話。啊,咋這樣呢?是的,沒錯。這也是我們經常誤解的原因。
各個會話之間是單獨的,獨立於其他會話,即便是同一個串連的多個會話也是如此。
一、幾個術語之間的定義(參照Oracle 9i &10g 編程藝術)
串連(connection):串連是從客戶到Oracle 執行個體的一條實體路徑。串連可以在網路上建立,或者通過IPC 機制建立。通常會在
客戶進程與一個專用伺服器或一個調度器之間建立串連。
會話(session):會話是執行個體中存在的一個邏輯實體。這就是你的工作階段狀態(session state),也就是表示特定會話的一組記憶體
中的資料結構.提到"資料庫連接"時,大多數人首先想到的就是“會話”。你要在伺服器中的會話上執行SQL、提交事務和運行預存程序。
二、通過例子示範來查看之間的關係
1. 無串連,無會話,無進程的情形
[-->沒有建立建立串連時,沒有任何會話伺服器處理序
[oracle@odbp ~]$ ps -ef | grep oracleorcl
oracle 5685 5446 0 19:30 pts/1 00:00:00 grep oracleorcl
[oracle@odbp ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on Mon Jun 27 19:30:49 2011
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
idle> ho ps -ef | grep oracleorcl -->使用nolog登入是同樣也看不到任何會話伺服器處理序
oracle 5691 5686 0 19:31 pts/0 00:00:00 /bin/bash -c ps -ef | grep oracleorcl
2. 單個串連,單個會話,單個進程
-->使用scott身份登入,有一個對應的伺服器處理序被產生
idle> conn scott/tiger
Connected.
scott@ORCL> select sid,serial#,username from v$session where username is not null;
SID SERIAL# USERNAME
---------- ---------- -------------------------
159 5 SCOTT
scott@SQL> ho ps -ef | grep oracleorcl
oracle 5696 5686 0 19:32 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 5699 5686 0 19:32 pts/0 00:00:00 /bin/bash -c ps -ef | grep oracleorcl
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/