例えば、プログラムから自動でデータベースにアクセスした際、どのようなSQLが発行されたか確認したい場合がありますよね。
ログを見ればいいじゃんって話になりますけど、今回はOracleで実行されたSQLの情報が参照できるV$SQLビューを利用する方法をご紹介します。
V$SQLで実行したSQL文を参照
単純に最近実行したSQLを参照したい場合は、たったコレだけです!
1 2 3 4 5 6 7 |
SELECT SQL_FULLTEXT, FIRST_LOAD_TIME FROM V$SQL ORDER BY FIRST_LOAD_TIME DESC; |
以下の参考にしたサイトと比較しながらご説明します。
参考サイトでは、「SQL_TEXT」を出力していますが、これだと全SQL文の内、先頭から1,000文字しか出力されないようなので、「SQL_FULLTEXT」としました。
次に、「FIRST_LOAD_TIME DESC」で作成時刻の新しい順、つまり、最近実行したSQLから順に並ぶようにソートしています。
その他にどんな項目があるかはこちらをご覧ください。
もっと様々な情報が参照できるようですね。
同じSQL文はキャッシュされる!?
V$SQLは、素早く動作するようにキャッシュされているようなので、全く同じSQLを実行してもレコードが増えるわけではありません。
直前に実行したSQLでも、過去に全く同じSQLを実行している場合は、FIRST_LOAD_TIMEでソートしても、一番上に表示されないこともあります。上記の例では、単純に最初の実行日時の新しいものから順に取得しました。
しかし、全く同じではなく似たようなSQLを複数回実行した場合は絞り込むのが大変です。
そこで、実行した内容がわかっているのなら、WHERE句を使ってさらに絞り込みましょう。
1 2 3 4 5 6 7 8 9 |
SELECT SQL_FULLTEXT, FIRST_LOAD_TIME FROM V$SQL WHERE SQL_FULLTEXT LIKE '%〇〇%' ORDER BY FIRST_LOAD_TIME DESC; |
〇〇には、テーブル名やカラム名、その他どのような条件を含んだSQLかを細かく指定すると、より絞り込むここができます。
V$SQLをあまり頻繁に使うことはないかもしれませんが、もしOracleを利用する機会がありましたら、頭の片隅にでもあったら便利かもしれません。
コメント