Oracle10gの新機能である、DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE/DISABLEを使って、プロセスレベルでSQLトレースを取得する。
Oracle9iまでは、インスタンスレベルか、セッションレベルでしかSQLトレースを取得できなかった。
Oracle8iまで:
アプリケーション自体にALTER SESSION SET SQL_TRACE = TRUEを組み込むか、
インスタンスレベルで有効にするために、初期化パラメータファイルを書き換えて、インスタンスを再起動するしかなかった。
プロダクションコードにデバッグ用コードを埋め込むことは、テスト無効を意味するので、基本的にはできない。
Oracle9iまで:
初期化パラメータファイルにサーバ・パラメータ・ファイル(SPFILE)を使っていれば、インスタンスの再起動は不要だが、
対象アプリケーション以外のSQLトレースも取れてしまうという問題が残った。
import java.sql.*; public class test2 { public static void main(String[] args) throws Exception { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = null; Statement stmt = null; ResultSet rs = null; try { con = DriverManager.getConnection("jdbc:oracle:oci:@test", "scott", "tiger"); stmt = con.createStatement(); rs = stmt.executeQuery("SELECT * FROM EMP WHERE EMPNO = 7900"); } finally { if(rs != null) { rs.close(); } if(stmt != null) { stmt.close(); } if(con != null) { con.close(); } } } }