【轉載】檢視當前會話SID的三種方法

ballontt發表於2013-04-23

檢視當前會話的session  ID 有如下三種方法:

 

1.   v$mystat檢視

 

SQL> desc v$mystat

 Name                                     Null?    Type

 ------------------------------------------------- --------------

 SID                                               NUMBER

 STATISTIC#                                         NUMBER

 VALUE                                             NUMBER

SQL> select sid from v$mystat where rownum=1;

      SID

----------

       19

 

2.   使用userenv(‘sid’) 直接獲取

 

這種方法只能在oracle 10g以後可以使用。

SQL> select userenv('sid') from dual;

 

USERENV('SID')

--------------

            19

 

3.   結合 userenv('sessionid') 與 v$session 檢視

 

userenv('sessionid') 返回的是session audit id.其對應v$session 的audsid欄位。

 

這在之前的blog中有說明。

OracleSYS.AUDSES$ 序列 說明

http://blog.csdn.net/tianlesoftware/article/details/7239890

 

在session 連線到資料庫的時候,會從SYS.AUDSES$序列中獲取一個audid 分配給session。

 

SQL> select sid from v$session where audsid=userenv('sessionid');

 

      SID

----------

       19

       25

      469

 

--這裡返回了3個值,我們直接檢視userenv('sessionid')  值:

SQL> select userenv('sessionid')   from dual;

 

USERENV('SESSIONID')

--------------------

         4294967295

 

在之前的AUDSES$的blog中提到:

      對於internal使用者(’/as sysoper’ 和 ‘/as sysdba’)和後臺程式,其對應的AUDID 為0.  

      在Oracle 10g中,如果AUDID的值為0,表明是internal 使用者,如果AUDID 值是4294967295,那麼就表明是用SYS 使用者直接連線的。

 

我們這裡返回三個結果是把所有SYS 使用者的session都返回了,所以這種方法有時的準確性並不高。

 源地址:http://blog.csdn.net/tianlesoftware/article/details/7240085

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27425054/viewspace-759144/,如需轉載,請註明出處,否則將追究法律責任。

相關文章