【Oracle-資料庫維護】-Oracle中USERENV和SYS_CONTEXT總結

sdon發表於2010-11-26
Oracle中USERENV和SYS_CONTEXT用來返回當前session的資訊,其中,userenv是為了保持向下相容的遺留函式,推薦使用sys_context函式呼叫userenv名稱空間來獲取相關資訊。

1.USERENV因為是相容的遺留函式,在10G中使用可能存在資料不唯一的問題
如:
SQL> SELECT LOGON_TIME, OSUSER, MACHINE, PROGRAM
2   FROM V$SESSION WHERE AUDSID = USERENV( 'SESSIONID' );
#可能存在多個返回值,
#如果使用sys帳號登入,每個SESSIONID將會一樣,不太明白
2.SESSIONID受到AUDSES$'佇列中的MAX_VALUE控制,SESSIONID在小於MAX_VALUE的cycle中迴圈
sys@8i> select * from user_sequences where sequence_name = 'AUDSES$';

SEQUENCE_N  MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
---------- ---------- ---------- ------------ - - ---------- -----------
AUDSES$             1 2000000000            1 Y N         20    10535706

sys@8i> select userenv('sessionid') from dual;

USERENV('SESSIONID')
--------------------
            10535689

3.因為重複問題,我們一般使用sys_context進行session環境查詢
select  sys_contxt('userenv','sid' from dual
#
4.當然,如果你僅需要檢視sid,也可以藉助v$mystat檢視
SQL> select * from v$mystat where rownum <=1;
 
       SID STATISTIC#      VALUE
---------- ---------- ----------
       307          0          1

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

相關文章