【SQL】OracleのV$SQLを使って直前に実行したSQL文を参照する

oracle-vsql

例えば、プログラムから自動でデータベースにアクセスした際、どのようなSQLが発行されたか確認したい場合がありますよね。
ログを見ればいいじゃんって話になりますけど、今回はOracleで実行されたSQLの情報が参照できるV$SQLビューを利用する方法をご紹介します。


V$SQLで実行したSQL文を参照

単純に最近実行したSQLを参照したい場合は、たったコレだけです!

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から順に並ぶようにソートしています。
その他にどんな項目があるかはこちらをご覧ください。

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を利用する機会がありましたら、頭の片隅にでもあったら便利かもしれません。




Amazonベストセラー

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA