プリントスタック TOKYO

データベースとセキュリティの世界から離れて早数年。過去の記憶を探しています。

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" -- メモリ保護カーソル