Oracle Application Context

來源:互聯網
上載者:User

Application Context是記憶體中的一組name-value對,application context從屬於某個命名空間(namespace)。

使用者只能通過一個自訂procedure調用dbms_session.set_context來設定application context的值。使用者使用sys_context(<namespace>,<name>)來擷取某個application context的值。

Application context分為三種

 

  • dabase session-based application context,又稱為local application context。
  • global application context
  • client session-based application context。通常被OCI使用,儲存在用戶端記憶體,而不是Oracle伺服器端,也由OCI程式管理。

Local application context儲存在UGA中,dedicated server mode, UGA在PGA中,shared server mode,UGA在SGA中。local application context是會話/server process層級的。只有本會話能夠訪問。當會話/server process終止時,local application context的生命週期也結束了。另一篇部落格Oracle VPD http://blog.csdn.net/chncaesar/article/details/18550029 給出了一個local application context的例子。

 

 

Global application context儲存在SGA中,只要SGA不消亡,global application context就一直存在。global application context常常用於跨會話,與會話無關的情境。dbms_session.set_context有兩個預設值為NULL的參數:

 

  • username
  • client_id

 

username = null , client_id=null。所有使用者都能訪問。

username = null, client_id=<client_id>。 只要session 的client_id =<client_id>,而不管username,都能訪問。

username = <database username>, client_id=null。只要session使用指定的oracle schema登陸,不管client_id,都能訪問。

username = <database username>, client_id=<client_id>. 常用於statless web session ,如http。

username = <non-database username>, client_id=<client_id> . 該username將用於資料庫連接池的owner。

例子1: 所有使用者都能訪問的application context

CREATE OR REPLACE CONTEXT global_hr_ctx USING hr_ctx_pkg ACCESSED GLOBALLY;
CREATE OR REPLACE PACKAGE hr_ctx_pkg
  AS 
    PROCEDURE set_hr_ctx(sec_level IN VARCHAR2);
    PROCEDURE clear_hr_context;
  END; 
  /
  CREATE OR REPLACE PACKAGE BODY hr_ctx_pkg
  AS                                           
    PROCEDURE set_hr_ctx(sec_level IN VARCHAR2)     
    AS 
    BEGIN 
    DBMS_SESSION.SET_CONTEXT( 
    <strong> namespace  => 'global_hr_ctx',
      attribute  => 'job_role',
      value      => sec_level);</strong>
    END set_hr_ctx;
         
  PROCEDURE clear_hr_context 
    AS
    BEGIN 
    DBMS_SESSION.CLEAR_CONTEXT('global_hr_ctx', 'job_role');
    END clear_context; 
  END;
 /

例子2: 跨session/application,但是使用同一個資料庫schema的application context。

CREATE OR REPLACE PACKAGE hr_ctx_pkg
  AS
    PROCEDURE set_hr_ctx(sec_level IN VARCHAR2, user_name IN VARCHAR2);
    PROCEDURE clear_hr_context;
  END;
  /
  CREATE OR REPLACE PACKAGE BODY hr_ctx_pkg
  AS
    PROCEDURE set_hr_ctx(sec_level IN VARCHAR2, user_name IN VARCHAR2)
    AS
    BEGIN
      DBMS_SESSION.SET_CONTEXT(
      namespace  => 'global_hr_ctx',
      attribute  => 'job_role',
      value      => sec_level,
<strong>      username  => user_name);</strong>
      END set_hr_ctx;
 
  PROCEDURE clear_hr_context
    AS
    BEGIN
      DBMS_SESSION.CLEAR_CONTEXT('global_hr_ctx');
    END clear_context;
  END;
 /

兩個例子都提供了clear_hr_context 預存程序。這是因為global application context常駐SGA,需要使用者使用完畢就清理,以免資訊泄露。

 

USERENV

USERENV是Oracle預定義的命名空間。它包含了許多常用的application context。

 

  • CURRENT_USER
  • DB_NAME
  • HOST: 用戶端機器名
  • CLIENT_INFO: 用戶端程式用作計數,標識符等

其他application context請參考SQL Language Reference。

VMware+Linux+Oracle 10G RAC全程詳細圖解

在CentOS 6.4下安裝Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虛擬機器中安裝步驟

Debian 下 安裝 Oracle 11g XE R2

Oracle 11gR2 在VMWare虛擬機器中安裝步驟

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.