Oracle SQLトレース
以前から忘れる前に投稿しておかなければならないと思っていた、Oracleで接続しているセッションだけのSQLトレースを取得する方法です。
SQL> ALTER SESSION SET EVENTS '10046 trace name context forever,level 12'; SQL> ALTER SESSION SET SQL_TRACE = 'TRUE'; ~トレースするSQL~ SQL> ALTER SESSION SET SQL_TRACE = 'FALSE';
トレースファイルの出力先は、下のSQL文で調べることができます。
SQL> SELECT * FROM V$PARAMETER WHERE NAME = 'USER_DUMP_DEST';
初期化パラメータに指定がない場合は、$ORACLE_BASE/admin//udump に出力されます。
また、一般的に出力後は整形(TKPROF)を行いますが、バインドパラメータの変数を参照するときは整形すると閲覧できなくなります。
たとえば、イベントのレベルには下のようなものがあります。
EVENTS="10210 trace name context forever, level 10" -- テーブル EVENTS="10211 trace name context forever, level 10" -- インデックス EVENTS="10210 trace name context forever, level 2" -- データブロックチェック EVENTS="10211 trace name context forever, level 2" -- インデックスブロックチェック EVENTS="10235 trace name context forever, level 1" -- メモリヒープチェック EVENTS="10049 trace name context forever, level 2" -- メモリ保護カーソル