Oracle查詢當前會話的sid

kingsql發表於2015-05-17
檢視當前會話的session  ID 有如下三種方法:
1.   v$mystat檢視
SQL> select sid from v$mystat where rownum=1;


       SID
----------
      1152
2.   使用userenv(‘sid’) 直接獲取
 
這種方法只能在oracle 10g以後可以使用。
SQL> select userenv('sid') from dual;


USERENV('SID')
--------------
          1152
3.   結合 userenv('sessionid') 與 v$session 檢視
 
userenv('sessionid') 返回的是session audit id.其對應v$session 的audsid欄位。
在session 連線到資料庫的時候,會從SYS.AUDSES$序列中獲取一個audid 分配給session。
SQL>  select sid from v$session where audsid=userenv('sessionid');


       SID
----------
       773
      1152
--這裡返回了2個值,我們直接檢視userenv('sessionid')  值:
SQL> select userenv('sessionid')   from dual;


USERENV('SESSIONID')
--------------------
          4294967295
對於internal使用者(’/as sysoper’ 和 ‘/as sysdba’)和後臺程式,其對應的AUDID 為0.  
      在Oracle 10g中,如果AUDID的值為0,表明是internal 使用者,如果AUDID 值是4294967295,那麼就表明是用SYS 使用者直接連線的
 
我們這裡返回三個結果是把所有SYS 使用者的session都返回了,所以這種方法有時的準確性並不高。
有關SYS.AUDSES$的說明可以參照http://blog.csdn.net/tianlesoftware/article/details/7239890

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

相關文章