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