DBMS_TRACE包學習

charsi發表於2010-06-13

DBMS_TRACE 包可能主要是開發除錯的時候用的比較多,主要是將trace資訊記錄到系統表裡.

開始使用前需要使用sys使用者執行$ORACLE_HOME/rdbms/admin/tracetab.sql語句,該指令碼建立plsql_trace_runs和plsql_trace_events兩個表和一個sequence,詳細可以參考指令碼內容.

通常使用的可能是dbms_trace.set_plsql_trace(trace_level);和dbms_trace.clear_plsql_trace兩個procedure.

trace_level可以參考dbms_trace package中的定義:

trace_all_calls constant integer := 1; -- Trace calls/returns
trace_enabled_calls constant integer := 2;

trace_all_exceptions constant integer := 4; -- trace exceptions
trace_enabled_exceptions constant integer := 8; -- (and handlers)

trace_all_sql constant integer := 32; -- trace SQL statements
trace_enabled_sql constant integer := 64; -- at PL/SQL level (does
-- not invoke SQL trace)

trace_all_lines constant integer := 128; -- trace each line
trace_enabled_lines constant integer := 256;

即1就代表trace_all_calls。

下面參考網上找了一個例子寫了個簡單的儲存過程:

create or replace procedure cur_trace_test as
in_rand number :=0;
lv_lang varchar2(30);
begin

select userenv('LANGUAGE') into lv_lang from dual;
dbms_trace.set_plsql_trace(1);

for i in 1 .. 2 LOOP
in_rand:=1+i;
if (MOD(in_rand,100) = 0) then
dbms_output.put_line(to_char(in_rand));
end if;
END LOOP;
dbms_trace.clear_plsql_trace;
end cur_trace_test;

執行後可以根據sys.plsql_trace_runs和sys.plsql_trace_events表中的資訊跟蹤儲存過程的執行.

[@more@]

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

相關文章