获取当前会话信息的方法

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


从刚接触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/11417069/viewspace-686920/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11417069/viewspace-686920/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值