利用dbms_application_info,讓v$session記錄額外的資訊

 DBMS_APPLICATION_INFO是一个非常有用的package,它提供了在V$SESSION 新增自訂紀錄的功能,以便追蹤SESSION

例如我們有一個第三方的程式連線DB,但是從v$session的資訊看來,只能查詢到程式名稱,但是不知道是誰執行了這個程式,所以每次發現某個session執行時間很久時,就只能強迫刪除,無法進一步與使用者討論。

此時就可以利用DBMS_APPLICATION_INFO來將自訂的紀錄提供到v$session中,簡單的範例如下:

declare
    aa number ;
    v_action varchar2(50);
    v_module varchar2(50);
    v_client_info varchar2(50);
begin
    dbms_application_info.set_action('設定action資料');
    dbms_application_info.set_module('設定Module資料','設定Action資料');
    dbms_application_info.set_client_info('設定Client_info資料');


    select 1+1 into aa from dual;


    dbms_application_info.read_client_info( v_client_info);
    dbms_application_info.read_module(v_module,v_action);  

    dbms_output.put_line('Client_info => ' || v_client_info) ;
    dbms_output.put_line('Action => ' || v_action) ;
    dbms_output.put_line('Module => ' || v_module);    

end;

其中dbms_application_info.set_module有兩個參數,第一個是設定moduel,第二個是設定action, 換句話說第二個參數與set_action是一樣的效果。

另外也可以用read_client_info與read_module這兩個函數來取出v$session中的client_info、module與action欄位的值