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();
}
}
}
}