连接并不是会话的同义词,发现这一点时很多人都很诧异。在大多数人眼里,它们都是一样的,但事实上并不一定如此。在一条连接上可以建立0个、一个或多个会话。各个会话是单独而且独立的,即使它们共享同一条数据库物理连接也是如此。一个会话中的提交不会影响该连接上的任何其他会话。实际上,一条连接上的各个会话可以使用不同的用户身份!

在Oracle中,连接只是客户进程和数据库实例之间的一条特殊线路,最常见的就是网络连接。这条连接可能连接到一个专用服务器进程,也可能连接到调度器。如前所述,连接上可以有0个或多个会话,这说明可以有连接而无相应的会话。另外,一个会话可以有连接也可以没有连接。使用高级Oracle Net特性(如连接池)时,客户可以删除一条物理连接,而会话依然保留(但是会话会空闲)。客户在这个会话上执行某个操作时,它会重新建立物理连接。下面更详细地定义这些术语:

* 连接(connection):连接是从客户到Oracle实例的一条物理路径。连接可以在网络上建立,或者通过IPC机制建立。通常会在客户进程与一个专用服务器或一个调度器之间建立连接。不过,如果使用Oracle的连接管理器(Connection Manager ,CMAN),还可以在客户和CMAN之间以及CMAN和数据库之间建立连接。CMAN的介绍超出了本书的范围,不过Oracle Net Services Administrator’s Guide(可以从http://otn.oracle.com免费得到)对CMAN有详细的说明。

* 会话(session):会话是实例中存在的一个逻辑实体。这就是你的会话状态(session state),也就是表示特定会话的一组内存中的数据结构。提到“数据库连接”时,大多数人首先想到的就是“会话”。你要在服务器中的会话上执行SQL、提交事务和运行存储过程。

可以使用SQL*Plus来看一看实际的连接和会话是什么样子,从中还可以了解到,实际上一条连接有多个会话的情况相当常见。这里使用了AUTOTRACE命令,并发现有两个会话。我们在一条连接上使用一个进程创建了两个会话。以下是其中的第一个会话:

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中要真正地断开连接,应该执行“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命令(这个命令的名字也起得不恰当),在这个现有的进程中创建一个新会话(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 连接和会话的区别相关推荐

  1. cmd sqlplus远程连接_Oracle连接远程数据库的四种方法

    Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍四种远程连接的方法和注意事项,并通过示例来说明,接下来我们就开始介绍 第一种方法: 若oracle服务器装在本机上,那就不多说了,连 ...

  2. oracle ping 超时_Oracle连接错误解决方法(TNS-12535: TNS: 操作超时)

    今天在win7上连接centos的oracle 10g一直连接不上.通过如下过程解决了. 1.登录到centos 执行 tnsping orcl 执行是成功的(orcl是oralce的全局数据库名). ...

  3. 理解oracle的共享连接和专用连接

    专用连接模式下,客户端连接只支持专用连接:共享连接模式下,既可以使用专用连接模式,又可以使用共享连接模式: 专用连接模式:一个客户端连接对应一个服务器进程,一对一: 共享连接模式:多个客户端连接对应一 ...

  4. Oracle 11g DRCP连接方式——基本原理

    学习Oracle是一个复杂.繁琐的过程.在浩如烟海的Oracle官方资料.新特性.MOS资料和各种Internal知识面前,我们总是觉得力不从心.不知所措.但是,这往往也就是我们不断坚持.积累和追寻的 ...

  5. oracle三种连接身份

    登录oracle数据库有三种连接身份   sysdba:数据库管理员,sysyoper:数据库操作员,normal:普通用户. "sysdba" 即数据库管理员 权限包括:   打 ...

  6. 删除oracle 连接进程,如何查看和清除oracle无用的连接进程

    如何查看和清除oracle无用的连接进程 DBA要定时对数据库的连接情况进行检查,看与数据库建立的会话数目是不是正常,如果建立了过多的连接,会消耗数据库的资源.同时,对一些"挂死" ...

  7. [Oracle- MySQL] Oracle通过dblink连接MySQL

    [Oracle -> MySQL]  Oracle通过dblink连接MySQL  业务上有这么一个需求,需要把Oracle的一些数据同步到MySQL,如果每次都是手动同步的话,实在太麻烦,因此 ...

  8. oracle protocol=beq 不可用,Oracle BEQ方式连接配置

    Oracle BEQ方式连接配置服务端和客户端在同一台机器上,可以使用BEQ连接,BEQ连接可以理解为进程间直接通信,不需要走网络监听,性能更高.可以参考MOS:How To Connect Usin ...

  9. Oracle 表连接方式(内连接/外连接/自连接) 详解

    Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制)        (2)右外连接(右边的表不加限制)         (3)全外连接(左 ...

最新文章

  1. 大盘点 | 2020年5篇图像分割算法最佳综述
  2. vue 内打开一个新窗口,带传参!
  3. 【译】Spring Boot 2.0 官方迁移指南
  4. ixf文件 mysql导入,控制 PC/IXF 文件导入数据库的一般规则
  5. BZOJ4076 : [Wf2014]Maze Reduction
  6. 封装高可复用的服务端响应SSC程序修复对象 --ServerResponse
  7. 领域驱动设计,让程序员心中有码(四)
  8. Python模块——_winreg操作注册表
  9. centos8 阿里云yum源_CentOS7更换阿里yum源
  10. 整理了 25 个前端相关的学习网站和一些靠谱的小工具,都来看看吧
  11. strstr区分大小写吗_ONU、机顶盒、路由器,遇到问题你会处理了吗?
  12. ]物体受力分析的方法
  13. 树莓派做服务器装什么系统安装,树莓派 安装 群晖系统安装教程
  14. Python学习笔记(五)——读写文件
  15. Aria2+yaaw+Chrome插件BaiduExporter实现百度网盘下载
  16. 【题解】JZOJ1321:灯
  17. 过滤 Excel 表格内容中的无效字符
  18. windows 10 打开任务管理器的快捷键
  19. xShell6远端登录Linux登录错误Connecting to 192.168.112.128:22... Could not connect to ‘192.168.112.128‘ (p
  20. 计算机科学与技术在生物方面的应用,浅谈信息技术在生物工程中的应用意义

热门文章

  1. 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络AlexNet
  2. 企业网站6个常见的优化漏洞
  3. scikit-learn决策树算法类库使用小结
  4. 团队作业-第二周-测试计划
  5. java.lang.NoClassDefFoundError: javax/transaction/Synchronization (jUnit测试报错)
  6. UVa 10026 - Shoemaker's Problem
  7. 泛型通用函数的一些特殊问题的解决方法
  8. 思科数据中心Nexus 3000
  9. 计算机网络中 子网掩码的算法,[网络天地]子网掩码快速算法(转载)
  10. clob类型字段最大存储长度_请教oracle的CLOB字段的最大长度?