Oracle 連接和會(huì)話的區(qū)別

Oracle 連接和會(huì)話的區(qū)別

連接并不是會(huì)話的同義詞,發(fā)現(xiàn)這一點(diǎn)時(shí)很多人都很詫異。在大多數(shù)人眼里,它們都是一樣的,但事實(shí)上并不一定如此。

在一條連接上可以建立0個(gè)、一個(gè)或多個(gè)會(huì)話。

各個(gè)會(huì)話是單獨(dú)而且獨(dú)立的,即使它們共享同一條數(shù)據(jù)庫物理連接也是如此。一個(gè)會(huì)話中的提交不會(huì)影響該連接上的任何其他會(huì)話。實(shí)際上,一條連接上的各個(gè)會(huì)話可以使用不同的用戶身份!在Oracle中,連接只是客戶進(jìn)程和數(shù)據(jù)庫實(shí)例之間的一條特殊線路,最常見的就是**連接。這條連接可能連接到一個(gè)專用服務(wù)器進(jìn)程,也可能連接到調(diào)度器。

如前所述,連接上可以有0個(gè)或多個(gè)會(huì)話,這說明可以有連接而無相應(yīng)的會(huì)話。另外,一個(gè)會(huì)話可以有連接也可以沒有連接。使用高級(jí)Oracle Net特性(如連接池)時(shí),客戶可以刪除一條物理連接,而會(huì)話依然保留(但是會(huì)話會(huì)空閑)。

客戶在這個(gè)會(huì)話上執(zhí)行某個(gè)操作時(shí),它會(huì)重新建立物理連接。下面更詳細(xì)地定義這些術(shù)語:* 連接(connection):連接是從客戶到Oracle實(shí)例的一條物理路徑。連接可以在**上建立,或者通過IPC機(jī)制建立。

通常會(huì)在客戶進(jìn)程與一個(gè)專用服務(wù)器或一個(gè)調(diào)度器之間建立連接。不過,如果使用Oracle的連接管理器(Connection Manager ,CMAN),還可以在客戶和CMAN之間以及CMAN和數(shù)據(jù)庫之間建立連接。CMAN的介紹超出了本書的范圍,不過Oracle Net Services Administrator‘s Guide對(duì)CMAN有詳細(xì)的說明。

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

可以使用SQL*Plus來看一看實(shí)際的連接和會(huì)話是什么樣子,從中還可以了解到,實(shí)際上一條連接有多個(gè)會(huì)話的情況相當(dāng)常見。這里使用了AUTOTRACE命令,并發(fā)現(xiàn)有兩個(gè)會(huì)話。我們?cè)谝粭l連接上使用一個(gè)進(jìn)程創(chuàng)建了兩個(gè)會(huì)話。以下是其中的**個(gè)會(huì)話: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 INACTIVESQL> set autotrace on statistics SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled SP2-0611: Error enabling STATISTICS report SQL>碰到錯(cuò)誤,原來是沒有添加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 statisticsUSERNAME SID SERIAL# SERVER PADDR STATUS—————————— ———- ———- ——— ——– ——–STORM 141 180 DEDICATED 30A1BDCC INACTIVE STORM 148 62 DEDICATED 30A1BDCC INACTIVESQL> disconnect從技術(shù)上講,這個(gè)命令應(yīng)該叫DESTROY_ALL_SESSIONS更合適,而不是DISCONNECT,因?yàn)槲覀儾]有真正物理地?cái)嚅_連接。

在SQL*Plus中要真正地?cái)嚅_連接,應(yīng)該執(zhí)行“exit”命令,因?yàn)槟惚仨毻顺霾拍芡耆蜂N連接。SQL> select username, sid, serial#, server, paddr, status from v$session where username = \’STORM\’;no rows selected可以看到,這個(gè)賬戶名下沒有會(huì)話,但是仍有一個(gè)進(jìn)程,相應(yīng)地有一條物理連接(使用前面的ADDR值)SQL> select username, program from v$process where addr = hextoraw(\’30A1BDCC\’);USERNAME PROGRAM————— ————————————————oracle oracle@hb (TNS V1-V3)SQL>所以,這就有了一條沒有相關(guān)會(huì)話的“連接”。可以使用SQL*Plus的CONNECT命令(這個(gè)命令的名字也起得不恰當(dāng)),在這個(gè)現(xiàn)有的進(jìn)程中創(chuàng)建一個(gè)新會(huì)話(CONNECT命令叫CREATE_SESSION更合適):可以看到,這個(gè)賬戶名下沒有會(huì)話,但是仍有一個(gè)進(jìn)程,相應(yīng)地有一條物理連接(使用前面的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還是一樣的,所以我們還是在使用同一條物理連接,但是(可能)有一個(gè)不同的SID.我說“可能有”,是因?yàn)橐苍S還會(huì)分配同樣的SID,這取決于在我們注銷時(shí)是否有別人登錄,以及我們?cè)瓉淼腟ID是否可用。另外: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合起來能作為一個(gè)session的**標(biāo)識(shí)。

傳輸層建立的“連接”和會(huì)話層建立的“會(huì)話”有什么區(qū)別?

這樣說吧,傳輸層是會(huì)話層的建立的基礎(chǔ)。根據(jù)OSI模型。

傳輸層的上層是會(huì)話層。

越是上層越是接近用戶的使用。會(huì)話層建立的是一個(gè)會(huì)話連接,此端的一個(gè)程序連接對(duì)放的一個(gè)程序。你可以理解成我要給你打電話,只需要用自己的手機(jī)撥打?qū)Ψ降碾娫捥?hào)碼就可以了。而傳輸層呢,真正意義上的建立連接,有兩個(gè)傳輸層協(xié)議,tcp和udp。

使用端口號(hào)區(qū)分上層也就是會(huì)話層的程序連接。例:192.168.100.2:2000—-202.12.23.145:80在傳輸層就是這樣的連接方式。再往下就是**層,進(jìn)行尋址路由轉(zhuǎn)發(fā),讓的數(shù)據(jù)能過到達(dá)對(duì)方那里。

傳輸層也就可以理解成對(duì)方的手機(jī)號(hào)碼。手機(jī)電話本里的名字比如應(yīng)用程序。想要詳細(xì)了解這方面信息,去看一看TCP/IP協(xié)議,你會(huì)受益匪淺的。

白話Oracle的連接和會(huì)話的區(qū)別

有A/B兩個(gè)城市,需要從A運(yùn)送白菜到B城 我們先建設(shè)一條公路 然后運(yùn)送白菜過去,包括準(zhǔn)備白菜和運(yùn)送白菜以及返回等一系列的動(dòng)作。 一條公路,可以運(yùn)送0-n次的白菜 當(dāng)然從A到B的公路也可能不只一條。

ssl包含哪些協(xié)議?3.ssl連接和ssl會(huì)話的區(qū)別是什么

SSL百科(Secure Sockets Layer)安**接層協(xié)議是Netscape公司1995年推出的一種安全通信協(xié)議。SSL提供了兩臺(tái)計(jì)算機(jī)之間的安全連接,對(duì)整個(gè)會(huì)話進(jìn)行了加密,從而保證了安全傳輸。

SSL協(xié)議建立在可靠的TCP傳輸控制協(xié)議之上,并且與上層協(xié)議無關(guān),各種應(yīng)用層協(xié)議(如:HTTP,F(xiàn)TP,TELNET等)能通過SSL協(xié)議進(jìn)行透明傳輸。

SSL協(xié)議分為兩層:SSL握手協(xié)議和SSL記錄協(xié)議。

什么是數(shù)據(jù)庫連接?連接和會(huì)話之間有什么關(guān)系?

原理上和網(wǎng)站的一個(gè)session差不多,只是session是把key放在cookie里面,數(shù)據(jù)庫連接是把key放在客戶端的library的內(nèi)存里(比如.Net Sql Client)。對(duì)MS SQL來說,這個(gè)連接的協(xié)議叫TDS,底下可以走多種傳輸層協(xié)議,比如tcpip,也可以named pipe。

而MySQL就又有自己的協(xié)議。

當(dāng)然在拿到key之前,先要走個(gè)authentication過程,比如Windows Authentication或者Sql authentication,過了authentication才會(huì)產(chǎn)生一個(gè)session key。如果是啟用SSL的話那么整個(gè)連接上的數(shù)據(jù)流還會(huì)被加密,防止信息泄露或者中間人攻擊。

session 和connection的不同

1.連接(connection)是一個(gè)物理的概念,它指的是一個(gè)通過**建立的客戶端和專有服務(wù)器(Dedicated Server)或調(diào)度器(Shared Server)的一個(gè)**連接。2.會(huì)話(session)是一個(gè)邏輯的概念,它是存在于實(shí)例中。

一個(gè)連接可以擁有多個(gè)會(huì)話也可以沒有會(huì)話,同一個(gè)連接上的不同會(huì)話之間不會(huì)相互影響。