Posted at

Oracle Databaseで直前に発行されたSQLを確認する方法


便利な動的パフォーマンス・ビュー

Oracle Databaseには動的パフォーマンス(V$)・ビューと呼ばれる、SYS権限でアクセスできるビューがあります。

色々便利なビューがあるみたいなのですが、今回はそのうちのV\$SQLとV\$SQLTEXTについて紹介したいと思います。


「アプリでエラー起きた!SQL見ないと原因わからん。。。」そんなときに

V\$SQLとV\$SQLTEXTを見たら発行したSQLの全文がわかります。すごい。

SELECT * FROM V$SQLTEXT

WHERE SQL_ID IN (
SELECT SQL_ID FROM V$SQL
WHERE LAST_ACTIVE_TIME > TO_DATE('任意の時間','YYYY/MM/DD HH:MI:SS'))
ORDER BY SQL_ID,PEACE

これを実行するだけで全文を取得できます!すごい!!

ただしSYSユーザとかのSQLの実行も多いので、そこはうまく抽出してください。(例えば僕はよくV\$SQL.MODULEで実行アプリケーションを絞ってます)


ちなみに

さっきはV\$SQLとV\$SQLTEXTをつなげましたが、V\$SQL.SQL_FULLTEXTでもSQL全文を取得できます。ただし、CLOB型なので、dbms_lob.substr関数とかを使わないとダメなんじゃないかなあ(やったことないです。。。)