SQLトレースの有効化
いくつの方法でトレースを有効にできます。
・インスタンスレベルのトレース
・トリガーを利用したトレース
・セッションレベルのトレース
・ログイン中のセッショントレース
・その他のセッションのトレース
(1)インスタンスレベルのトレース
下記のパラメータをPFILEに設定することでトレースを有効化できます。
trace_enabled = TRUE
全てのセッションとバックグラウンドプロセスも含めトレースを有効にします。
このパラメータを設定すると大量なトレースログが生成され、大量なシステム
リソースが消費されます。トレースファイルの保存場所はUSER_DUMP_DESTに依存します。
10046イベントを利用することでインスタンスレベルのトレースも有効化可能です。
例:下記の行をPFILEに追記することで10046イベントのレベル8で有効化可能
 event='10046 trace name context forever, level 8'
若しくは下記のコマンドを実行します。
ALTER SYSTEM SET EVENT '10046 trace name context forever, level 8';
無効にする:
ALTER SYSTEM SET EVENT '10046 trace name context off';
インスタンス既に実行中の場合、ALTER SYSTEMを使えば直接トレースを有効化できます。
新規セッションのトレースを有効化するが、カレントセッションとバックグラウンド
プロセスには効果がありません。
ALTER SYSTEM SET trace_enabled = TRUE;
無効にする:
ALTER SYSTEM SET trace_enabled = FALSE;
(2)トリガーを利用したトレース
システムのトリガーを使ってトレースを有効・無効できます。
例:ユーザhrのトリガー
CREATE OR REPLACE TRIGGER hr_logon
AFTER LOGON ON hr.SCHEMA
BEGIN
DBMS_SESSION.set_sql_trace (TRUE);
END;
CREATE OR REPLACE TRIGGER hr_logoff
BEFORE LOGOFF ON hr.SCHEMA
BEGIN
DBMS_SESSION.set_sql_trace (FALSE);
END;
システム上トリガーの作成を完了し、下記のコールすれば有効・無効可能です。
ALTER TRIGGER hr_logon ENABLE;
ALTER TRIGGER hr_logon DISABLE;
(3)セッションレベルのトレース
セッションレベルのトレースを有効にする:
ALTER SESSION SET sql_trace = TRUE;
セッションレベルのトレースを有効にする:
ALTER SESSION SET sql_trace = FALSE;
イベント10046を利用したセッショントレースも可能です。
例:
ALTER SESSION SET EVENTS '10046 trace name context forever, level 8';
ALTER SESSION SET EVENTS '10046 trace name context off';
DBMS_SESSIONを利用してカレントセッションのトレースを有効化可能です。
EXEC DBMS_SESSION.set_sql_trace (TRUE);
EXEC DBMS_SESSION.set_sql_trace (FALSE);
DBMS_SESSIONより柔軟性のあるDBMS_SUPPORTを利用してカレントセッションのトレース有効も可能です。
パラメータなしだと既定レベルは1となります:
EXEC DBMS_SUPPORT.start_trace;
レベル4のトレースを有効:
EXEC DBMS_SUPPORT.start_trace (binds=>true);
レベル8のトレースを有効:
EXEC DBMS_SUPPORT.start_trace (waits=>true);
レベル12のトレースを有効:
EXEC DBMS_SUPPORT.start_trace (binds=>true,waits=>true);
無効にする:
EXEC DBMS_SUPPORT.stop_trace;
(4)ログオフ必要なし、トレースを有効化
その他のセッショントレースを無効にするにはDBMS_MONITOR、V$SESSIONのSIDとSERIAL#を利用します。
例:SID 9 と serial# 29のセッションを有効・無効にする
EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id =>9, serial_num =>29, waits => TRUE, binds => TRUE);
EXEC DBMS_MONITOR.SESSION_TRACE_DISABLE(session_id =>9,serial_num =>29);
(5)その他セッションのトレース
同上DBMS_SUPPORT、SIDとSERIAL#で他セッショントレースの有効・無効が可能です。
Event 10046
レベル1: EXEC DBMS_SUPPORT.start_trace_in_session (9,29);
レベル4: EXEC DBMS_SUPPORT.start_trace_in_session (9,29,binds=>true);
レベル8: EXEC DBMS_SUPPORT.start_trace_in_session (9,29,waits=>true);
レベル12:EXEC DBMS_SUPPORT.start_trace_in_session (9,29,binds=>true,waits=>true);
無効化: EXEC DBMS_SUPPORT.stop_trace_in_session (9,29);
DBMS_SYSTEMパッケージを使用し、上記の機能も実現できます。
EXEC DBMS_SYSTEM.set_sql_trace_in_session (9,29,TRUE);
(レベル1相当)
無効化:
EXEC DBMS_SYSTEM.set_sql_trace_in_session (9,29,FALSE);
その他レベルを指定する場合:(例:レベル8)
EXEC DBMS_SYSTEM.set_ev (9,29,10046,8,'');
無効化: EXEC DBMS_SYSTEM.set_ev (9,29,10046,0,'');
それ以外下記のパッケージとツールで実現可能?
DBMS_TRACE
DBMS_UTILITY
DBMS_DEBUG
DBMS_DDL
DBMS_STATS
oradebug