Oracle11g新增事件CLIENTID_OVERWRITE

yangtingkun發表於2010-09-17

11g中,Oracle新增了CLIENTID_OVERWRITE事件,使得執行DBMS_APPLICATION_INFO包的SET_CLIENT_INFO資訊後,V$SESSION可以自動反應設定結果。

 

 

預設情況下,設定了SET_CLIENT_INFO過程後,還要執行DBMS_SESSIONSET_IDENTIFIER過程,才能使得V$SESSION反映設定後的結果:

SQL> SELECT * FROM V$VERSION;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SQL> SELECT SID, SERIAL#, CLIENT_IDENTIFIER
  2  FROM V$SESSION
  3  WHERE SID IN (SELECT SID FROM V$MYSTAT);

       SID    SERIAL# CLIENT_IDENTIFIER
---------- ---------- ----------------------------------------------------------------
       243       7966

SQL> EXEC DBMS_APPLICATION_INFO.SET_CLIENT_INFO('TEST')

PL/SQL 過程已成功完成。

SQL> SELECT SID, SERIAL#, CLIENT_IDENTIFIER
  2  FROM V$SESSION
  3  WHERE SID IN (SELECT SID FROM V$MYSTAT);

       SID    SERIAL# CLIENT_IDENTIFIER
---------- ---------- ----------------------------------------------------------------
       243       7966

SQL> VAR STR VARCHAR2(4000)
SQL> EXEC DBMS_APPLICATION_INFO.READ_CLIENT_INFO(:STR)

PL/SQL 過程已成功完成。

SQL> PRINT STR

STR
--------------------------------------------------------------------------------------
TEST

SQL> EXEC DBMS_SESSION.SET_IDENTIFIER('TEST')

PL/SQL 過程已成功完成。

SQL> SELECT SID, SERIAL#, CLIENT_IDENTIFIER
  2  FROM V$SESSION
  3  WHERE SID IN (SELECT SID FROM V$MYSTAT);

       SID    SERIAL# CLIENT_IDENTIFIER
---------- ---------- ----------------------------------------------------------------
       243       7966 TEST

利用DBMS_APPLICATION_INFO包設定的客戶端標識只能通過這個包的READ_CLIENT_INFO來獲取,如果想要設定的結果直接顯示在V$SESSION檢視中,可以設定EVENTS CLIENTID_OVERWRITE

SQL> ALTER SESSION SET EVENTS 'CLIENTID_OVERWRITE';

會話已更改。

SQL> EXEC DBMS_APPLICATION_INFO.SET_CLIENT_INFO('TEST_NEW')

PL/SQL 過程已成功完成。

SQL> SELECT SID, SERIAL#, CLIENT_IDENTIFIER
  2  FROM V$SESSION
  3  WHERE SID IN (SELECT SID FROM V$MYSTAT);

       SID    SERIAL# CLIENT_IDENTIFIER
---------- ---------- ----------------------------------------------------------------
       243       7966 TEST_NEW

取消這個事件通過下面的語句:

SQL> ALTER SESSION SET EVENTS 'CLIENTID_OVERWRITE OFF';

會話已更改。

 

 

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

相關文章