connection session process的聯絡與區別
連線並不是會話的同義詞,發現這一點時很多人都很詫異。在大多數人眼裡,它們都是一樣的,但事實上並不一定如此。在一條連線上可以建立0個、一個或多個會話。各個會話是單獨而且獨立的,即使它們共享同一條資料庫物理連線也是如此。一個會話中的提交不會影響該連線上的任何其他會話。實際上,一條連線上的各個會話可以使用不同的使用者身份!
在Oracle中,連線只是客戶程式和資料庫例項之間的一條特殊線路,最常見的就是網路連線。這條連線可能連線到一個專用伺服器程式,也可能連線到排程器。如前所述,連線上可以有0個或多個會話,這說明可以有連線而無相應的會話。另外,一個會話可以有連線也可以沒有連線。使用高階Oracle Net特性(如連線池)時,客戶可以刪除一條物理連線,而會話依然保留(但是會話會空閒)。客戶在這個會話上執行某個操作時,它會重新建立物理連線。下面更詳細地定義這些術語:
? 連線(connection):連線是從客戶到Oracle例項的一條物理路徑。連線可以在網路上建立,或者透過IPC機制建立。通常會在客戶程式與一個專用伺服器或一個排程器之間建立連線。不過,如果使用Oracle的連線管理器(Connection Manager ,CMAN),還可以在客戶和CMAN之間以及CMAN和資料庫之間建立連線。CMAN的介紹超出了本書的範圍,不過Oracle Net Services Administrator’s Guide(可以從免費得到)對CMAN有詳細的說明。
? 會話(session):會話是例項中存在的一個邏輯實體。這就是你的會話狀態(session state),
也就是表示特定會話的一組記憶體中的資料結構。提到“資料庫連線”時,大多數人首先想到的就是“會話”。你要在伺服器中的會話上執行SQL、提交事務和執行儲存過程。
簡單地說,連線和會話之間有一種多對多的關係。不過,最常見的是專用伺服器與單一會話之間的一對一關係,這也是大多數人每天所看到的情況。
A process is a physical process or thread.
On unix, you can see a process with "ps" for example. It is there.
There are many types of processes in Oracle -- background processes like SMON, PMON,
RECO, ARCH, CKPT, EMNn, DBWR, etc..... And user processes like dedicated servers or
shared server (multi-threaded server -- aka MTS -- configuration)
每個sql login稱為一個連線(connection),而每個連線,可以產生一個或多個會話,如果資料庫執行在專用伺服器方式,一個會話對應一個伺服器程式(process),
如果資料庫執行在共享伺服器方式,一個伺服器程式可以為多個會話服務。
在dedicated server機器上的測試如下:
資料庫的session和作業系統process是對應的。
這表示一個session對應一個process,但是一個process未必對應一個session。
大家可以透過SELECT spid
FROM v$process
WHERE NOT EXISTS ( SELECT 1
FROM v$session
WHERE paddr = addr); 檢視
或
SQL> select count(*) from v$process;
COUNT(*)
----------
53
SQL> select count(*) from v$session;
COUNT(*)
----------
50
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7548/viewspace-1049940/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cookie與session的區別與聯絡CookieSession
- Session與Cookie的區別與聯絡SessionCookie
- Session和Cookie的聯絡與區別SessionCookie
- Session和Cookie的區別與聯絡SessionCookie
- 【檢視】V$BGPROCESS與V$PROCESS間的區別與聯絡
- 由JSESSIONID談cookie與SESSION的區別和聯絡JSSessionCookie
- 同步與阻塞的區別與聯絡
- hive與hbase的聯絡與區別Hive
- onchange與onpropertychange的聯絡與區別!
- BS與CS的聯絡與區別
- define與typedef區別與聯絡
- JRE與JDK的區別與聯絡JDK
- CGI與Servlet的區別和聯絡Servlet
- Apache與Tomcat 區別聯絡ApacheTomcat
- 【Python入門必看】Python中Cookie和Session的區別與聯絡!PythonCookieSession
- Kafka與ActiveMQ的區別與聯絡詳解KafkaMQ
- 詳解Kafka與ActiveMQ的區別與聯絡!KafkaMQ
- B/S與C/S的聯絡與區別
- 關於HashSet與TreeSet的區別與聯絡
- Oracle FailSafe與rac的聯絡與區別OracleAI
- Android與Java ME的區別與聯絡AndroidJava
- COM與DCOM的區別與聯絡 (轉)
- Linux和Ubuntu的區別與聯絡LinuxUbuntu
- COM/DCOM的區別與聯絡 (轉)
- javaSE中的==和equals的聯絡與區別Java
- JDK,JRE,JVM區別與聯絡JDKJVM
- servlet/filter/listener/interceptor區別與聯絡ServletFilter
- Oracle FailSafe與rac的聯絡與區別(zt)OracleAI
- Oracle中的Connect、session、process的區別OracleSession
- 程式和執行緒的區別與聯絡執行緒
- HDFS 塊和 Input Splits 的區別與聯絡
- NUMA,MPP和HADOOP的區別與聯絡Hadoop
- 並行和併發的區別與聯絡並行
- SYS,SYSTEM,DBA,SYSDBA,SYSOPER的區別與聯絡
- volatile和synchronized的區別與聯絡[轉]synchronized
- malloc free與new delete的區別和聯絡delete
- 在Oracle中session和process的區別(轉)OracleSession
- process/session/connection的一些問題Session