Oracle中專用伺服器和共用伺服器串連與會話

來源:互聯網
上載者:User

串連:用戶端進程和伺服器處理序之間的一條實體路徑

會話:資料庫的一個邏輯實體,由用戶端進程和伺服器處理序搭建起來,作為2個進程之間通訊的通道

一、專用伺服器串連

1.在linux上,可以在同一台機器上運行用戶端和伺服器處理序,能很清楚的看出這種父/子進程關係

SYSTEM@PROD> select a.spid dedicated_server,b.process clientpid

2 from v$process a,v$session b

3 where a.addr=b.paddr and

4 b.sid=(select sid from v$mystat where rownum=1);

DEDICATED_SE CLIENTPID

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

4606        4557

SYSTEM@PROD> !/bin/ps -ef | grep 4557

oracle   4557 8686 0 15:25 pts/3   00:00:00 sqlplus  用戶端進程(父進程)

oracle   4606 4557 0 15:25 ?       00:00:00 oraclePROD (DESCRIPTION=(LOCAL=YES)

(ADDRESS=(PROTOCOL=beq))) 服務端進程(子進程)

即:sqlplus進程是父進程->oraclePROD是子進程,能很清楚的看出了這種父/子進程關係。誰發起誰是父進程

DESCRIPTION=(LOCAL=YES)說明用戶端進程是本地的

DESCRIPTION=(LOCAL=NO)說明用戶端進程是遠端

2.可以使用sqlplus在看看實際的串連和會話是什麼樣子。這裡使用了autotrace命令,發現有兩個會話

,我們在一條串連建立了2個會話。一條串連上的不同會話可以使用不同的使用者身份

即:一個串連上可以建立0個、1個、多個會話,每個會話都是獨立的。

  一個會話可以有串連也可以沒有串連(會話會空閑)

[oracle@secdb1 ~]$ sqlplus system/oracle        使用system使用者進入sqlplus

SYSTEM@PROD> select username,sid,serial#,server,paddr,status from v$session

2 where username=USER;

USERNAME                            SID   SERIAL# SERVER   PADDR   STATUS

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

SYSTEM                               110      24 DEDICATED329DB9DCACTIVE

只需開啟autotrace來查看sqlplus中所執行語句的統計結果

SYSTEM@PROD> set autotrace on statistics         開啟執行計畫中的統計資訊

SYSTEM@PROD> select username,sid,serial#,server,paddr,status from v$session

2 where username=USER;

USERNAME                             SID   SERIAL# SERVER   PADDR   STATUS

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

更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

SYSTEM                               109       183 DEDICATED329DB9DCINACTIVE 監控會話

SYSTEM                               110        24 DEDICATED329DB9DCACTIVE   實際會話

這個109 110會話使用了一個329DB9DC進程地址,也就是一個串連建立了2個會話

Statistics

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

0 recursive calls

0 db block gets

0 consistent gets

0 physical reads

0 redo size

  774 bytes sent via SQL*Net to client

  381 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

2 rows processed

SYSTEM@PROD> set autotrace off                  關閉執行計畫

Sqlplus中啟用AUTOTRACE時,如果我們執行DML操作(insert  update  delete  merge)

(1)如果還不存在“監控會話”,它會使用當前串連建立一個新會話(監控會話109)

(2)要求這個新會話查詢v$sesstat視圖來記住實際會話的初始統計值。

(3)在原會話中運行DML操作

(4)DML語句執行結束後,sqlplus會請求監控會話重新查詢v$sesstat視圖,並產生前面的所示報告,顯示出實際會話的統計結果只差。

3.現在使用sqlplus來查看一條沒有任何會話的串連,在sqlplus視窗中鍵入一條disconnect命令

SYSTEM@PROD> disconnect                       關閉所有會話

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

@> show user

USER is ""                                      沒有登入使用者

@> select username,sid,serial#,server,paddr,status from v$session    

2 where username=USER;

SP2-0640: Not connected                          只是說明沒有會話了,但串連還在

註:從技術上講,這個命令應該叫distroy_all_session(破壞所有會話)更合適,而不是disconnect,因為我們並沒有真正斷開物理串連。如果想斷開物理串連,應該執行“exit”

@> exit

[oracle@secdb1 ~]$

[oracle@secdb1 ~]$ sqlplus / as sysdba                       使用sys使用者來查詢system使用者的會話

SYS@PROD> select * from v$session where username='SYSTEM';  可以看到,這個system使用者下沒有會話

no rows selected

但PADDR329DB9DC進程還存在,對應的有一條物理串連。

SYS@PROD> select username,program from v$process where addr='329DB9DC';

USERNAME       PROGRAM

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

oracle         oracle@secdb1 (TNS V1-V3)

4.現在使用sqlplus的connect命令建立一個新會話,但還是使用原來的PADDR329DB9DC進程串連

@> conn system/oracle

Connected.

SYSTEM@PROD>

SYSTEM@PROD> select username,sid,serial#,server,paddr,status from v$session

2 where username=USER;

USERNAME                             SID   SERIAL# SERVER   PADDR   STATUS

SYSTEM                                104    31  DEDICATED329DB9DCACTIVE

可以注意到,PADDR329DB9DC還是使用原來的進程串連,但SID是新的會話ID了,可能會分配原來的SID,也可能是新的SID,這取決於在我們登出時是否有別人登入,以及我們原來的SID是否可用。

註:最常見的是一個串連對應一個會話,這也是大多數人每天所看到的情況

1)專用伺服器模式下UGA在PGA中分配空間

2)共用伺服器模式下UGA在SGA中分配空間

作者:51cto部落格 Oracle小混子

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.