【原】oracle session and connection

作者:david_zhang@sh 【转载时请以超链接形式标明文章】
链接:http://www.cnblogs.com/david-zhang-index/archive/2012/09/13/2682876.html

连接和会话不是同义词。连接是从客户端到oracle实例的一条物理路径;会话是实例中存在的一个逻辑实体;

在一个连接上可以建立0个、一个或多个会话;一个会话可以有或者也可以没有连接;

试验一:一个连接上多个会话

 1 SQL>  select username,sid,serial#,server,paddr,status from v$session where username='SYS';
 2 
 3 USERNAME          SID    SERIAL# SERVER    PADDR            STATUS
 4 ---------- ---------- ---------- --------- ---------------- --------
 5 SYS               659      35747 DEDICATED 00000001DC88BDA0 ACTIVE
 6 
 7 SQL> set autotrace on statistics;
 8 SQL> select username,sid,serial#,server,paddr,status from v$session where username='SYS';
 9 
10 USERNAME          SID    SERIAL# SERVER    PADDR            STATUS
11 ---------- ---------- ---------- --------- ---------------- --------
12 SYS               648      65428 DEDICATED 00000001DC88BDA0 INACTIVE
13 SYS               659      35747 DEDICATED 00000001DC88BDA0 ACTIVE
14 
15 
16 Statistics
17 ----------------------------------------------------------
18          17  recursive calls
19           0  db block gets
20           0  consistent gets
21           0  physical reads
22           0  redo size
23         991  bytes sent via SQL*Net to client
24         520  bytes received via SQL*Net from client
25           2  SQL*Net roundtrips to/from client
26           0  sorts (memory)
27           0  sorts (disk)
28           2  rows processed
29 
30 SQL> set autotrace off;

试验中,进行了两次查询,一次是没有开启autotrace,paddr表示服务器进程地址(实质是一个连接id);开启autotrace查询,可以看到两条结果(两个会话)但是paddr是相同的(即同一连接)。

试验二:在上个试验的基础上,实验二证明没有任何会话连接依然存在情况

 1 SQL> disconnect;
 2 Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
 3 With the Partitioning, OLAP, Data Mining and Real Application Testing options
 4 
 5 SQL> conn test/test
 6 Connected.
 7 SQL> select * from v$session where uername = 'SYS';
 8 no rows selected

10 SQL> select username,program from v$process where addr = hextoraw ('00000001DC88BDA0');
11 
12 USERNAME PROGRAM
13 ---------- ------------------------------------------------
14 oracle oracle@DCMSBDM (TNS V1-V3)

disconnect表示关闭所有会话,在用test账号登陆数据库查看sys会话(这里说明下,在试验一中最好不好用sys账号做,可以新建一个账号),会发现没有会话,因为disconnect了,但是通过paddr在v$process里面可以查到仍有一个进程物理连接,所以就有没有会话的“连接”。

使用sqlplus的conn命令再次连接进来,在原来的进程中又创建一个新会话,如下,而paddr依然是同一个,更加证明这个问题。

1 SQL> conn /as sysdba
2 Connected.
3 SQL> select username,sid,serial#,server,paddr,status from v$session where username='SYS';
4 
5 USERNAME          SID    SERIAL# SERVER    PADDR            STATUS
6 ---------- ---------- ---------- --------- ---------------- --------
7 SYS               659      35851 DEDICATED 00000001DC88BDA0 ACTIVE
posted @ 2012-09-13 10:19  david_zhang@sh  阅读(1487)  评论(0编辑  收藏  举报