所謂會話,其實就是一次連接,假設你用plsql連接數據庫,只要你連上了(不管有沒有操作),他都是一個會話。其他的也是一樣,比如說在數據庫執(zhí)行的計劃任務,這個也是一次會話,只不過這個會話是oracle自己發(fā)起的,而不是人為發(fā)起的。比如,網頁連接了數據庫,那么這個也是一次會話。斷開連接后,會話關閉。
創(chuàng)新互聯(lián)公司主要從事網站設計、成都網站建設、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務牙克石,十載網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575
至于一次調用,這個好理解,你調用了oracle里面的東西就可以說成調用,不過這個沒什么實際意義,基本上在查詢和操作時,沒什么人注意。舉例說吧,一張表按某字段分組取最大值,如果用select max(yyy) from table group by xxx
那么這張表調用一次(因為你只用了一次就把問題搞定了,動作包括分組和取最大值)
但是實際的生產系統(tǒng),不可能這么簡單,會有一些很復雜的sql和存儲過程,人們一般為了優(yōu)化,就會去盡量減少相同表的調用次數,其實一般就是減少嵌套的層數和使用盡量短的語句,個人的理解。
連接 (connection)與會話 (session)這兩個概念均與用戶進程 (user process)緊密相關,但二者又具有不同的含義。
連接 :用戶進程和 Oracle 實例間的通信通道(communication pathway)。這個通信通道是通過進程間的通信機制(interprocess communication mechanisms)(在同一個計算機上運行用戶進程和 Oracle 進程)或網絡軟件(network software)(當數據庫應用程序與 Oracle 服務器運行在不同的計算機上時,就需要通過網絡來通信)建立的。
會話 :用戶通過用戶進程與 Oracle 實例建立的連接[此處連接與上文中的連接含義不同 ,主要指用戶和數據庫間的聯(lián)系 ]。例如,當用戶啟動 SQL*Plus 時必須提供有效的用戶名和密碼,之后 Oracle 為此用戶建立一個會話。從用戶開始連接到用戶斷開連接(或退出數據庫應用程序)期間,會話一直持續(xù)。
Oracle 數據庫中的同一個用戶可以同時創(chuàng)建多個會話。例如,用戶名/密碼為的SCOTT/TIGER 用戶可以多次連接到同一個 Oracle 實例。
當系統(tǒng)沒有運行在共享服務模式下時,Oracle 為每個用戶會話創(chuàng)建一個服務進程(server process)。而當系統(tǒng)運行在共享服務模式下時,多個用戶會話可以共享同一個服務進程。
希望能幫到您!
連接并不是會話的同義詞,發(fā)現(xiàn)這一點時很多人都很詫異。在大多數人眼里,它們都是一樣的,但事實上并不一定如此。在一條連接上可以建立0個、一個或多個會話。各個會話是單獨而且獨立的,即使它們共享同一條數據庫物理連接也是如此。一個會話中的提交不會影響該連接上的任何其他會話。實際上,一條連接上的各個會話可以使用不同的用戶身份!
在Oracle中,連接只是客戶進程和數據庫實例之間的一條特殊線路,最常見的就是網絡連接。這條連接可能連接到一個專用服務器進程,也可能連接到調度器。如前所述,連接上可以有0個或多個會話,這說明可以有連接而無相應的會話。另外,一個會話可以有連接也可以沒有連接。使用高級Oracle Net特性(如連接池)時,客戶可以刪除一條物理連接,而會話依然保留(但是會話會空閑)??蛻粼谶@個會話上執(zhí)行某個操作時,它會重新建立物理連接。下面更詳細地定義這些術語:* 連接(connection):連接是從客戶到Oracle實例的一條物理路徑。連接可以在網絡上建立,或者通過IPC機制建立。通常會在客戶進程與一個專用服務器或一個調度器之間建立連接。不過,如果使用Oracle的連接管理器(Connection Manager ,CMAN),還可以在客戶和CMAN之間以及CMAN和數據庫之間建立連接。CMAN的介紹超出了本書的范圍,不過Oracle Net Services Administrator‘s Guide對CMAN有詳細的說明。
* 會話(session):會話是實例中存在的一個邏輯實體。這就是你的會話狀態(tài)(session state),也就是表示特定會話的一組內存中的數據結構。提到“數據庫連接”時,大多數人首先想到的就是“會話”。你要在服務器中的會話上執(zhí)行SQL、提交事務和運行存儲過程。
可以使用SQL*Plus來看一看實際的連接和會話是什么樣子,從中還可以了解到,實際上一條連接有多個會話的情況相當常見。這里使用了AUTOTRACE命令,并發(fā)現(xiàn)有兩個會話。我們在一條連接上使用一個進程創(chuàng)建了兩個會話。以下是其中的第一個會話:sqlplus "storm/unimas" SQL select username, sid, serial#, server, paddr, status from v$session where username = 'STORM';USERNAME SID SERIAL# SERVER PADDR STATUS
------------------------------ ---------- ---------- --------- -------- --------
STORM 148 60 DEDICATED 30A1BDCC INACTIVE
SQL set autotrace on statistics SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled SP2-0611: Error enabling STATISTICS report SQL
碰到錯誤,原來是沒有添加PLUSTRACE role sqlplus "sys/unimas as sysdba" SQL create role plustrace;Role created. SQL grant select on v_$sesstat to plustrace;Grant succeeded. SQL grant select on v_$statname to plustrace;Grant succeeded. SQL grant select on v_$mystat to plustrace;Grant succeeded. SQL grant plustrace to dba with admin option;Grant succeeded. SQL grant plustrace to STORM;Grant succeeded.
重新登錄storm SQL set autotrace on statistics
USERNAME SID SERIAL# SERVER PADDR STATUS
------------------------------ ---------- ---------- --------- -------- --------
STORM 141 180 DEDICATED 30A1BDCC INACTIVE STORM 148 62 DEDICATED 30A1BDCC INACTIVE
SQL disconnect
從技術上講,這個命令應該叫DESTROY_ALL_SESSIONS更合適,而不是DISCONNECT,因為我們并沒有真正物理地斷開連接。
在SQL*Plus中要真正地斷開連接,應該執(zhí)行“exit”命令,因為你必須退出才能完全撤銷連接。
SQL select username, sid, serial#, server, paddr, status from v$session where username = 'STORM';no rows selected
可以看到,這個賬戶名下沒有會話,但是仍有一個進程,相應地有一條物理連接(使用前面的ADDR值)
SQL select username, program from v$process where addr = hextoraw('30A1BDCC');
USERNAME PROGRAM
--------------- ------------------------------------------------
oracle oracle@hb (TNS V1-V3)
SQL所以,這就有了一條沒有相關會話的“連接”??梢允褂肧QL*Plus的CONNECT命令(這個命令的名字也起得不恰當),在這個現(xiàn)有的進程中創(chuàng)建一個新會話(CONNECT命令叫CREATE_SESSION更合適):可以看到,這個賬戶名下沒有會話,但是仍有一個進程,相應地有一條物理連接(使用前面的ADDR值)
SQL select username, sid, serial#, server, paddr, status from v$session where username = 'STORM';
USERNAME SID SERIAL# SERVER PADDR STATUS
------------------------------ ---------- ---------- --------- -------- --------
STORM 153 58 DEDICATED 30A1BDCC INACTIVE
可以注意到,PADDR還是一樣的,所以我們還是在使用同一條物理連接,但是(可能)有一個不同的SID.我說“可能有”,是因為也許還會分配同樣的SID,這取決于在我們注銷時是否有別人登錄,以及我們原來的SID是否可用。
另外:Serial# is in v$session. It is an Oracle generated value used in combination with the SID to create a unique session identifier. SID和SERIAL合起來能作為一個session的唯一標識。
這個不一樣的,舉個簡單的例子你就明白了
假如說,你去移動營業(yè)廳辦理業(yè)務,你跟移動營業(yè)廳的服務人員就建立了一個鏈接,一個會話,這個是一個邏輯上的概念,也可以簡單的理解為一個鏈接就是一個會話。
你去了可能辦理很多業(yè)務,比如查話費,辦套餐,買手機等等,每一個行為都可以理解為一個事務,這里稍微提一下,事務的四個特性ACID(原子性(Atomicity) ;一致性(Consistency) ;隔離性(Isolation);持久性(Durability) ),事務是業(yè)務層面的一個概念。比如你充話費,當你把錢交給業(yè)務員,業(yè)務員那邊操作成功了,你的賬號才會有話費到賬,這就是一個事務;
想象一下,當你與Oracle簡歷鏈接(會話)時候,你可能會有多個操作,比如update操作,當你執(zhí)行完update后只有當你提交了,別的鏈接才能看到跟你一樣的值。
一個會話可以有多個事務。
查看session:
select * from v$session where username is not null
select username,count(username) from v$session where username is not null group by username
當前連接數:
select count(*) from v$process
查看連接數參數的設置情況
select value from v$parameter where name = 'processes'
Select count(*) from v$session where status='ACTIVE' #并發(fā)連接數
當前名稱:如何理解oracle會話,oracle 會話
本文鏈接:http://www.rwnh.cn/article4/dsdjcoe.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網站、App設計、搜索引擎優(yōu)化、網站內鏈、全網營銷推廣、移動網站建設
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)