--========================
-- 进程、会话、连接之间的差异
--========================
在使用Oracle database的时候,连接与会话是我们经常碰到的词语之一。咋一看貌似一回事,事实则不然。一个连接上可以建立零个、
一个、甚至多个会话。啊,咋这样呢?是的,没错。这也是我们经常误解的原因。
各个会话之间是单独的,独立于其他会话,即便是同一个连接的多个会话也是如此。
一、几个术语之间的定义(参照Oracle 9i &10g 编程艺术)
连接(connection):连接是从客户到Oracle 实例的一条物理路径。连接可以在网络上建立,或者通过IPC 机制建立。通常会在
客户进程与一个专用服务器或一个调度器之间建立连接。
会话(session):会话是实例中存在的一个逻辑实体。这就是你的会话状态(session state),也就是表示特定会话的一组内存
中的数据结构.提到"数据库连接"时,大多数人首先想到的就是“会话”。你要在服务器中的会话上执行SQL、提交事务和运行存储过程。
二、通过例子演示来查看之间的关系
1. 无连接,无会话,无进程的情形
[-->没有建立建立连接时,没有任何会话服务器进程
[oracle@odbp ~]$ ps -ef | grep oracleorcl
oracle 5685 5446 0 19:30 pts/1 00:00:00 grep oracleorcl
[oracle@odbp ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on Mon Jun 27 19:30:49 2011
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
idle> ho ps -ef | grep oracleorcl -->使用nolog登录是同样也看不到任何会话服务器进程
oracle 5691 5686 0 19:31 pts/0 00:00:00 /bin/bash -c ps -ef | grep oracleorcl
2. 单个连接,单个会话,单个进程
-->使用scott身份登录,有一个对应的服务器进程被产生
idle> conn scott/tiger
Connected.
scott@ORCL> select sid,serial#,username from v$session where username is not null;
SID SERIAL# USERNAME
---------- ---------- -------------------------
159 5 SCOTT
scott@SQL> ho ps -ef | grep oracleorcl
oracle 5696 5686 0 19:32 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 5699 5686 0 19:32 pts/0 00:00:00 /bin/bash -c ps -ef | grep oracleorcl
查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/