ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 获取当前会话信息的方法

获取当前会话信息的方法

原创 Linux操作系统 作者:yangtingkun 时间:2011-01-22 23:57:37 0 删除 编辑

一直以为有两种方法可以获取当前会话信息,最近才发现其中一种已经不再适用。

 

 

从刚接触Oracle的时候,就听说两种获取当前会话的方法,一种是通过关联V$MYSTAT获取当前会话的SID;另一种是判断会话的AUDSID是否等于USERENV中的SESSIONID

第二种方法虽然可以少关联一个视图,但是相对毕竟复杂,而且写法不很直观不容易记,因此绝大多数情况下,会选择第一种方法。不过在TomExpert one on one Oracle中,他是利用的第二种方法。

而最近进行一个测试的时候,心血来潮尝试了一下第二种方法,却意外的发现这种方法已经不再适用了:

SQL> select spid
  2  from v$process p, v$session s
  3  where p.addr = s.paddr
  4  and s.audsid = sys_context('USERENV', 'SESSIONID');

SPID
------------
28178
28114
28505
29750
29752
29753

6 rows selected.

SQL> select sid
  2  from v$session
  3  where audsid = sys_context('USERENV', 'SESSIONID');

       SID
----------
      1078
      1079
      1081
      1085
      1089
      1093

6 rows selected.

SQL> select sid
  2  from v$session
  3  where audsid = USERENV('SESSIONID');

       SID
----------
      1078
      1079
      1081
      1085
      1089
      1093

6 rows selected.

而第一种方法则没有任何的问题:

SQL> select sid, spid
  2  from v$process p, v$session s
  3  where p.addr = s.paddr
  4  and s.sid in
  5  (select sid
  6  from v$mystat
  7  where rownum = 1);

       SID SPID
---------- ------------
      1089 28505

查询了metalink后发现,第二种方法似乎在9i以后就不保证返回当前的会话了,看来可以彻底忘记这种方法了。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-684479/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10526188