日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

incc与oracle连接_Oracle 连接和会话的区别

發(fā)布時間:2023/12/9 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 incc与oracle连接_Oracle 连接和会话的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

連接并不是會話的同義詞,發(fā)現這一點時很多人都很詫異。在大多數人眼里,它們都是一樣的,但事實上并不一定如此。在一條連接上可以建立0個、一個或多個會話。各個會話是單獨而且獨立的,即使它們共享同一條數據庫物理連接也是如此。一個會話中的提交不會影響該連接上的任何其他會話。實際上,一條連接上的各個會話可以使用不同的用戶身份!

在Oracle中,連接只是客戶進程和數據庫實例之間的一條特殊線路,最常見的就是網絡連接。這條連接可能連接到一個專用服務器進程,也可能連接到調度器。如前所述,連接上可以有0個或多個會話,這說明可以有連接而無相應的會話。另外,一個會話可以有連接也可以沒有連接。使用高級Oracle Net特性(如連接池)時,客戶可以刪除一條物理連接,而會話依然保留(但是會話會空閑)。客戶在這個會話上執(zhí)行某個操作時,它會重新建立物理連接。下面更詳細地定義這些術語:

* 連接(connection):連接是從客戶到Oracle實例的一條物理路徑。連接可以在網絡上建立,或者通過IPC機制建立。通常會在客戶進程與一個專用服務器或一個調度器之間建立連接。不過,如果使用Oracle的連接管理器(Connection Manager ,CMAN),還可以在客戶和CMAN之間以及CMAN和數據庫之間建立連接。CMAN的介紹超出了本書的范圍,不過Oracle Net Services Administrator’s Guide(可以從http://otn.oracle.com免費得到)對CMAN有詳細的說明。

* 會話(session):會話是實例中存在的一個邏輯實體。這就是你的會話狀態(tài)(session state),也就是表示特定會話的一組內存中的數據結構。提到“數據庫連接”時,大多數人首先想到的就是“會話”。你要在服務器中的會話上執(zhí)行SQL、提交事務和運行存儲過程。

可以使用SQL*Plus來看一看實際的連接和會話是什么樣子,從中還可以了解到,實際上一條連接有多個會話的情況相當常見。這里使用了AUTOTRACE命令,并發(fā)現有兩個會話。我們在一條連接上使用一個進程創(chuàng)建了兩個會話。以下是其中的第一個會話:

sqlplus "storm/unimas"

SQL> select username, sid, serial#, server, paddr, status from v$session where username = 'STORM';

USERNAME? ? ?SID ? ?SERIAL# SERVER ? ?PADDRSTATUS

------------------------------ ---------- ---------- --------- -------- --------

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 ? ?PADDRSTATUS

------------------------------ ---------- ---------- --------- -------- --------

STORM? ? ?141180 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');

USERNAMEPROGRAM

--------------- ------------------------------------------------

oracleoracle@hb (TNS V1-V3)

SQL>

所以,這就有了一條沒有相關會話的“連接”。可以使用SQL*Plus的CONNECT命令(這個命令的名字也起得不恰當),在這個現有的進程中創(chuàng)建一個新會話(CONNECT命令叫CREATE_SESSION更合適):可以看到,這個賬戶名下沒有會話,但是仍有一個進程,相應地有一條物理連接(使用前面的ADDR值)

SQL> select username, sid, serial#, server, paddr, status from v$session where username = 'STORM';

USERNAME? ? ?SID ? ?SERIAL# SERVER ? ?PADDRSTATUS

------------------------------ ---------- ---------- --------- -------- --------

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的唯一標識。

總結

以上是生活随笔為你收集整理的incc与oracle连接_Oracle 连接和会话的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。