centos 下载oracle_Oracle中的“连接”和“会话”,你真的搞得懂?

朋友老刘文章,本文讲述了Oracle中连接和会话的含义。

发现有时候,越是大家认为简单的概念或认知,其实理解的都非一致。

对Oracle中连接和会话的含义,总是有些模糊,参考TOM大叔的《Oracle编程艺术》,重新整理了下知识点。

在Oracle中,“连接”不是“会话”的同义词,一个连接上可以创建0个、1个或多个会话,多个独立的会话可以通过一个连接关联在一起,甚至可以独立于连接存在(无连接),各个会话之间是独立的,即使他们共享数据库上的同一个物理连接亦是如此。一个连接上的各个会话可以属于不同的数据库用户。

连接,connection,可以说是客户端进程和数据库实例之间的一条物理路径,例如网络连接、IPC,这个连接可能连接到一个专用服务器进程(dedicated server),或者是一个调度器进程(shared server)。

会话,session,是数据库中的一个逻辑实体,客户端进程可以通过他在数据库中执行SQL等操作,你所看到的会话状态信息,代表了你的会话在实例内存中的数据结构的集合,会话是在数据库上执行SQL、提交事务和运行存储过程的地方。

导图,

abcdfbc412ec0453f1a33606da821d85.png

我们通过实验,更直观地来看连接和会话的区别和联系。

sqlplus登录数据库,可以看到这是个和专用服务器连接的会话,其中PADDR是这个专用服务器进程的地址,

SQL> select username, sid, serial#, server, paddr, status
  2  from v$session
  3  where username = USER;

USERNAME                              SID    SERIAL# SERVER    PADDR            STATUS
------------------------------ ---------- ---------- --------- ---------------- --------
BISAL                                 131       8681 DEDICATED 000000009F4BEB30 ACTIVE

现在打开autotrace看下执行语句的统计结果,可以看到,此时有了两个会话了,从他们的PADDR的值,能推测这两个会话都使用同一个专用服务器进程,因为我们是测试,所以当前操作系统中只启动了一个进程(sqlplus),没创建新的进程,即两个会话,只使用了一个连接。再看下会话状态,一个是ACTIVE,一个是INACTIVE,ACTIVE的会话正在执行SQL,INACTIVE的会话(autotrace的会话)是“监视”实际的会话,报告他做了什么,

SQL> set autotrace on statistics

SQL> select username, sid, serial#, server, paddr, status
  2  from v$session
  3  where username = USER;

USERNAME                              SID    SERIAL# SERVER    PADDR            STATUS
------------------------------ ---------- ---------- --------- ---------------- --------
BISAL                                 131       8681 DEDICATED 000000009F4BEB30 ACTIVE
BISAL                                 132       3625 DEDICATED 000000009F4BEB30 INACTIVE

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          0  consistent gets
          0  physical reads
          0  redo size
        993  bytes sent via SQL*Net to client
        524  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          2  rows processed

之所以启动了新的会话来“监视”执行语句的会话,主要因为如果在同一个会话中观察统计信息,就会对统计信息造成影响,毕竟观察统计信息的操作,也要进行排序、消耗I/O以及网络传输数据等。

为了清除会话,我们执行disconnect,此时并未真正物理地断开连接,

SQL> disconnect
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select * from dual;
SP2-0640: Not connected


查看v$session显示用户BISAL未建立任何连接,但使用刚才得到的专用服务器进程地址(PADDR)能看到存在一个进程,有一个物理连接,因此,这就有了一条没有关联会话的连接,

SQL> select * from v$session where username = 'BISAL';
no rows selected

SQL> select username, program
  2  from v$process
  3  where addr = hextoraw('000000009F4BEB30');

USERNAME        PROGRAM
--------------- ------------------------------------------------
oracle          oracle@DEPDBBAK1 (TNS V1-V3)

使用connect在这个没有会话的进程上创建一个新会话,可以看到出现了新的会话,并且PADDR还是之前的,说明用的还是原来的专用服务器进程,这个新会话还是在同一个物理连接,SID是否相同,这个待定,取决于disconnect时是否有别人登录,以及原来的SID是否可用,

SQL> conn bisal/bisal
Connected.
SQL> select username, sid, serial#, server, paddr, status
  2  from v$session
  3  where username = USER;

USERNAME                              SID    SERIAL# SERVER    PADDR            STATUS
------------------------------ ---------- ---------- --------- ---------------- --------
BISAL                                 131       8683 DEDICATED 000000009F4BEB30 ACTIVE

以上测试,说明了使用专用服务器进程的连接下,“连接”和“会话”,证明了一个连接上可以创建0个、1个或多个会话,科学还是严谨的,所以对待一些专业的术语,还是了解清楚,更有助我们对原理的把控。

转文至此。

db471793d0c1e9eaf9c39a6afcb8f83f.png

关注个人微信公众号“一森咖记” 656579904663769057f97d08359461c0.png 4c754d14ed3a4bb4ecadc3f145fae4a8.png

   

近期热文

你可能也会对以下话题感兴趣。点击链接便可查看。

  • Oracle ADG同步技术,DBA必备的一种“后悔药”

  • 神技_如何快捷下载Oracle补丁的方法?!

  • 趋势篇:oracle 11g,12c,18c,19c之support lifetime

  • Configuring Kernel Parameters about SHMMAX on HP

  • 对recursive calls的深刻理解

  • Centos能不能替换RHEL?

  • RAC1 服务器要重启,喂:RAC2你先顶一下,咋搞?!

  • 对recursive calls的深刻理解

  • OpenJDK和Oracle JDK有什么区别和联系?

  • Centos能不能替换RHEL?

  • PLSQL Developer中控制结果集表格自动提交

  • alter table T1 add column新增字段执行时间超长,咋回事?

  • Oracle 11g 异机rman恢复报错ORA-27302:failure occurred at: sskgpcreates

  • 年末总结_聊一聊数据库行业的“继往开来”

  • Materialized view物化视图的一个简单应用场景

  • 干货:RHEL7.2生产环境下双节点12c RAC搭建实操

  • 【干货篇】在国内外数据库百家争鸣的时代,DBA们该何去何从?

  • LINUX环境:MySQL和Oracle开机自启动,咋搞?Logminer:oracle人为误操作之恢复神器

  • What:ASM自动脱落了

  • 实操:12C RAC环境下的ADG同步库搭建

  • “神器”:Oracle日志采集分析工具——TFA

  • Oracle Rac:关闭透明大页的原因及方法

  • 实操篇:Oracle 19c的安装部署

  • 浅谈MySQL三种锁:全局锁、表锁和行锁

  • Oracle如何访问MySql:透明网关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值