DBMS_SESSION包小議(四)
除了使用ALTER SESSION設定會話的狀態,利用V$SESSION查詢會話狀態,Oracle還提供了PL/SQL介面DBMS_SESSION來查詢和設定會話相關的狀態。
描述SET_IDENTIFIER、CLEAR_IDENTIFIER、CLOSE_DATABASE_LINK和SET_EDITION_DEFERRED幾個簡單的過程。
DBMS_SESSION包小議(一):http://yangtingkun.itpub.net/post/468/498365
DBMS_SESSION包小議(二):http://yangtingkun.itpub.net/post/468/498408
DBMS_SESSION包小議(三):http://yangtingkun.itpub.net/post/468/498451
一般來說設定會話級的狀態都是透過ALTER SESSION語句,也有個別的例外,比如角色的設定是透過SET語句實現的。Oracle除了提供SQL的方法外,還提供了PL/SQL的介面,DBMS_SESSION包,將會話狀態的設定和查詢整合在這個包中。
使用DBMS_SESSION包可以設定當前會話的客戶端標識,利用這個方法可以更加輕鬆的在V$SESSION檢視中找到指定的會話:
SQL> SELECT SID, SERIAL#, CLIENT_IDENTIFIER
2 FROM V$SESSION
3 WHERE SID IN
4 (SELECT SID
5 FROM V$MYSTAT
6 WHERE ROWNUM = 1);
SID SERIAL# CLIENT_IDENTIFIER
---------- ---------- ----------------------------------------------------------------
146 3579
SQL> EXEC DBMS_SESSION.SET_IDENTIFIER('MY_TEST')
PL/SQL 過程已成功完成。
SQL> SELECT SID, SERIAL#, CLIENT_IDENTIFIER
2 FROM V$SESSION
3 WHERE CLIENT_IDENTIFIER = 'MY_TEST';
SID SERIAL# CLIENT_IDENTIFIER
---------- ---------- ----------------------------------------------------------------
146 3579 MY_TEST
使用CLEAR_IDENTIFIER過程可以清除客戶端標識的設定:
SQL> EXEC DBMS_SESSION.CLEAR_IDENTIFIER
PL/SQL 過程已成功完成。
SQL> SELECT SID, SERIAL#, CLIENT_IDENTIFIER
2 FROM V$SESSION
3 WHERE SID = 146;
SID SERIAL# CLIENT_IDENTIFIER
---------- ---------- ----------------------------------------------------------------
146 3579
而CLOSE_DATABASE_LINK則與ALTER SESSION CLOSE DATABASE LINK語法的功能一樣,由於關閉當前會話開啟的資料庫鏈:
SQL> SELECT DB_LINK FROM USER_DB_LINKS;
DB_LINK
-----------------------------------------------------------------------
TEST112@TEST112
SQL> SELECT GLOBAL_NAME
2 FROM GLOBAL_NAME@TEST112@TEST112;
GLOBAL_NAME
-----------------------------------------------------------------------
TEST112
SQL> EXEC DBMS_SESSION.CLOSE_DATABASE_LINK('TEST112@TEST112')
BEGIN DBMS_SESSION.CLOSE_DATABASE_LINK('TEST112@TEST112'); END;
*
第 1 行出現錯誤:
ORA-02080: 資料庫連結正在使用中
ORA-06512: 在 "SYS.DBMS_SESSION", line 170
ORA-06512: 在 line 1
SQL> COMMIT;
提交完成。
SQL> EXEC DBMS_SESSION.CLOSE_DATABASE_LINK('TEST112@TEST112')
PL/SQL 過程已成功完成。
這種方法是的使用者在PL/SQL語句中關閉資料庫鏈不再需要執行EXECUTE IMMEDIATE語句,而直接使用DBMS_SESSION包的CLOSE_DATABASE_LINK過程呼叫就可以了。
最後看一下SET_EDITION_DEFERRED過程。11gr2中Oracle提供了版本的功能,可以透過ALTER SESSION來設定當前的版本,同樣在DBMS_SESSION包中,也增加了設定當前會話版本的功能:
SQL> SELECT SYS_CONTEXT('USERENV', 'CURRENT_EDITION_NAME') FROM DUAL;
SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
-------------------------------------------------------------------------------------
ORA$BASE
SQL> SELECT * FROM ALL_EDITIONS;
EDITION_NAME PARENT_EDITION_NAME USA
------------------------------ ------------------------------ ---
ORA$BASE YES
E_1 ORA$BASE YES
SQL> EXEC DBMS_SESSION.SET_EDITION_DEFERRED('E_1')
PL/SQL 過程已成功完成。
SQL> SELECT SYS_CONTEXT('USERENV', 'CURRENT_EDITION_NAME') FROM DUAL;
SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
------------------------------------------------------------------------------------
E_1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-630128/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DBMS_SESSION包小議(八)Session
- DBMS_SESSION包小議(七)Session
- DBMS_SESSION包小議(六)Session
- DBMS_SESSION包小議(五)Session
- DBMS_SESSION包小議(三)Session
- DBMS_SESSION包小議(二)Session
- DBMS_SESSION包小議(一)Session
- 小議Oracle外來鍵約束脩改行為(四)Oracle
- tshark 抓包 mysql 協議包MySql協議
- WireShark——IP協議包分析(Ping分析IP協議包)協議
- 小議解析parse
- oracle nomount小議Oracle
- HTTP協議資料包HTTP協議
- 面試小結(四)面試
- oracle dbms包和其他包的使用大全 (四)Oracle
- TCP協議小結TCP協議
- UDP協議抓包分析 -- wiresharkUDP協議
- Javascript 閉包小結JavaScript
- 小議物化檢視與基表資料不一致的消除(四)
- 1、iptables-基礎-包過濾防火牆-四層防火牆(只支援4層協議)防火牆協議
- 小知識二、Then協議協議
- 資料庫安全小議資料庫
- 小議“資料開放”
- 小議星型轉換
- 小議軟體測試
- Http網路協議包 (快速理解)HTTP協議
- 使用WireShark抓包分析TCP協議TCP協議
- Wireshark中的TCP協議包分析TCP協議
- python閉包小例子Python
- 微信小程式抓包-windows微信小程式Windows
- 智慧小程式檔案館——小程式包更新
- 如何減小微信小程式程式碼包大小微信小程式
- Wireshark資料抓包分析(網路協議篇)第1章網路協議抓包概述協議
- Asyncdb(四):MySQL網路協議分析MySql協議
- 隨記(四):簡述HSTS協議協議
- 實驗四————RIP協議的配置協議
- 第四章 SIP協議協議
- 四則運算小程式