设为首页 收藏本站
查看: 864|回复: 0

[经验分享] 从oracle临时表理解会话与链接

[复制链接]

尚未签到

发表于 2016-8-6 18:59:52 | 显示全部楼层 |阅读模式
用oracle时间比较长了,但只是单纯的使用,很少关心一些基本的东西,比如oracle中会话和链接的区别,我懒得看一大堆的介绍,只是看了oracle临时表的用法,实际测试了一下,之后才明白了这二者的区别,我想用这种方法理解这两者的区别比看N篇介绍更加印象深刻。

这里先不说会话和链接的区别和关系,首先看看oracle的会话级临时表,会话级临时表有这样的特性:当你当前SESSION 不退出的时候,临时表中的数据是存在的,而当你退出当前SESSION 之后,临时表中的数据就全部被清空了,换句话说,如果你不退出当前SESSION(这里简称 session a)而是用另一个SESSION(这里简称 session b)登录,是看不到session a中插入到临时表中的数据的,如果session a不退出,它里面建立的临时表的数据就会一直存在,直到它退出会话才被清除。

一个简单的例子即可印证,在这个例子中清楚的体现了链接和会话的关系和区别。

我们用sys用户登录并记录下当前有哪些会话,我使用的是plsqldev这种数据库工具,显示查询结果比较美观,方便

在plsqldev中打开一个命令窗口执行:
select sid,logon_time,username,machine from v$session order by logon_time

得到的结果是:

    SQL> select sid,to_char(logon_time,'yyyy-mm-dd hh24:mi:ss'),username,machine from v$session order by logon_time desc;
    ;

           SID TO_CHAR(LOGON_TIME,'YYYY-MM-DD USERNAME                       MACHINE
    ---------- ------------------------------ ------------------------------ ----------------------------------------------------------------
           316 2011-03-10 00:56:37                                           6AA448B035B94BC
           308 2011-03-10 00:56:22            SYS                            WORKGROUP\6AA448B035B94BC
           317 2011-03-10 00:56:09            SYS                            WORKGROUP\6AA448B035B94BC
           303 2011-03-09 21:32:50            DBSNMP                         WORKGROUP\6AA448B035B94BC
           297 2011-03-09 21:31:59                                           6AA448B035B94BC
           301 2011-03-09 21:31:51            SYSMAN                         6AA448B035B94BC
           298 2011-03-09 21:31:51            SYSMAN                         6AA448B035B94BC
           313 2011-03-09 21:31:50                                           6AA448B035B94BC
           306 2011-03-09 21:31:50            SYSMAN                         6AA448B035B94BC
           319 2011-03-09 21:31:39                                           6AA448B035B94BC
           334 2011-03-09 21:31:16                                           6AA448B035B94BC
           333 2011-03-09 21:31:16                                           6AA448B035B94BC
           332 2011-03-09 21:31:16                                           6AA448B035B94BC
           331 2011-03-09 21:31:16                                           6AA448B035B94BC
           330 2011-03-09 21:31:16                                           6AA448B035B94BC
           329 2011-03-09 21:31:16                                           6AA448B035B94BC
           328 2011-03-09 21:31:16                                           6AA448B035B94BC
           327 2011-03-09 21:31:16                                           6AA448B035B94BC
           326 2011-03-09 21:31:16                                           6AA448B035B94BC
           335 2011-03-09 21:31:16                                           6AA448B035B94BC
           325 2011-03-09 21:31:16                                           6AA448B035B94BC

    21 rows selected

    SQL>
并且我记录了我打开plsqldev并登录的时间是2011-03-10 00:56,所以我想上面查询结果中的307、308和316会话就是我打开plsqldev并登录成功,并且执行了查询时,创建的两个会话。

然后我开始创建oracle会话级临时表

    SQL> insert into tst_session_table values (1,'name1');

    1 row inserted
    SQL> insert into tst_session_table values (2,'name2');

    1 row inserted

    SQL> commit;

    Commit complete

在当前命令窗口中查一下结果:


    SQL> select * from tst_session_table;

                                       F_ID F_NAME
    --------------------------------------- --------------------
                                          1 name1
                                          2 name2

    SQL>

可以看到这个表中以经有数据了,暂且认为这是当前会话中保存的数据。
在plsqldev中重新打开一个命令窗口执行刚才的查询:

    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
    Connected as SYS

    SQL>  select * from tst_session_table;

                                       F_ID F_NAME
    --------------------------------------- --------------------

    SQL>

可以看到表里没有数据,我再切回到刚才的那个窗口,执行查询仍然可以查到数据,明显这两个窗口各有一个不同的会话,符合了oracle会话级临时表的特性。

这是再看一下当前会话表的情况


    SQL> select sid,to_char(logon_time,'yyyy-mm-dd hh24:mi:ss'),username,machine from v$session order by logon_time desc;

           SID TO_CHAR(LOGON_TIME,'YYYY-MM-DD USERNAME                       MACHINE
    ---------- ------------------------------ ------------------------------ ----------------------------------------------------------------
           311 2011-03-10 01:00:05            SYS                            WORKGROUP\6AA448B035B94BC
           316 2011-03-10 00:59:52                                           6AA448B035B94BC
           308 2011-03-10 00:56:22            SYS                            WORKGROUP\6AA448B035B94BC
           317 2011-03-10 00:56:09            SYS                            WORKGROUP\6AA448B035B94BC
           303 2011-03-09 21:32:50            DBSNMP                         WORKGROUP\6AA448B035B94BC
           297 2011-03-09 21:31:59                                           6AA448B035B94BC
           298 2011-03-09 21:31:51            SYSMAN                         6AA448B035B94BC
           301 2011-03-09 21:31:51            SYSMAN                         6AA448B035B94BC
           313 2011-03-09 21:31:50                                           6AA448B035B94BC
           306 2011-03-09 21:31:50            SYSMAN                         6AA448B035B94BC
           319 2011-03-09 21:31:39                                           6AA448B035B94BC
           325 2011-03-09 21:31:16                                           6AA448B035B94BC
           326 2011-03-09 21:31:16                                           6AA448B035B94BC
           327 2011-03-09 21:31:16                                           6AA448B035B94BC
           328 2011-03-09 21:31:16                                           6AA448B035B94BC
           329 2011-03-09 21:31:16                                           6AA448B035B94BC
           335 2011-03-09 21:31:16                                           6AA448B035B94BC
           331 2011-03-09 21:31:16                                           6AA448B035B94BC
           332 2011-03-09 21:31:16                                           6AA448B035B94BC
           333 2011-03-09 21:31:16                                           6AA448B035B94BC
           334 2011-03-09 21:31:16                                           6AA448B035B94BC
           330 2011-03-09 21:31:16                                           6AA448B035B94BC

    22 rows selected

    SQL>

发现311会话是新增的,明显这和新打开的sql窗口有关.
如果不查询一下 v$session,猛然看起来是有点奇怪,明明没有退出plsqldev,只是打了一个新的命令窗口而已,其实这个结果恰恰解释了链接和会话的关系以及区别,看看下面的分析:
当用plsqldev工具sys用户成功登录之后会建立一个连接,每当我在plsqldev打开一个窗口就并且执行了DDL或DML操作就会创建1个新的会话,不清楚其他的操作是否也是如此,但是推想一下,如果是关于数据库的操作,不建立会话,客户端如何操作oracle呢,所以肯定也是要建立新的会话,这个有待以后求证。

现在我关闭了最后打开的命令窗口,再查一下当前所有会话情况:
发现311会话不见了。因此可以断定以下结果:
1.  311会话是一个新的会话
2.  316会话中向临时表插入了数据
3.  317和308这两个会话是plsqldev工具自己建立的会话,可能有别的用途

  316会话和317会话两个不同的会话,tst_session_table表数据的有无明显的体现了这一点。

总结一下:

当oracle客户端和服务端的链接建立之后,会在链接的基础上建立若干的会话,之后oracle客户端与oracle服务端都会在一个连接(不一定是在同一个会话中)中进行交互,因此链接和会话是1对多的关系。有的资料上将oracle允许存在失去了物理链接的会话,这个需要抽个时间测试一下,眼见为实,呵呵。
   
    今天就先写到这里,这只是我对链接和会话在实验的基础上的粗略理解,欢迎各位提出自己的高见,在此先行谢过。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-253858-1-1.html 上篇帖子: Oracle竟然也有正则表达式的函数 下篇帖子: 将CSV导入Oracle数据库中的办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表