JDBC トレースをとるには
提供:DB2逆引きWiki
【DB2逆引きリファレンス目次】 【DB2逆引きリファレンス目次#運用監視編】 【DB2逆引きリファレンス目次#トレース情報】
目次 |
前提
- データベース接続が必要
解説
ユニバーサルJDBCドライバーを利用する場合にJDBCトレースを取得するには、接続の作成時に以下のプロパティを設定します。
- traceFile
- トレースを記録するためのファイルのパスを指定します。
- traceLevel
-
トレースレベルを整数値で指定します。指定できる値の一覧は表5-3-1に示すとおりです。
トレースレベル 取得される情報 com.ibm.db2.jcc.DB2BaseDataSource.TRACE_NONE トレースは取得しない com.ibm.db2.jcc.DB2BaseDataSource.TRACE_CONNECTION_CALLS 接続に対する呼び出し情報 com.ibm.db2.jcc.DB2BaseDataSource.TRACE_STATEMENT_CALLS ステートメントに対する呼び出し情報 com.ibm.db2.jcc.DB2BaseDataSource.TRACE_RESULT_SET_CALLS 結果セットに対する呼び出し情報 com.ibm.db2.jcc.DB2BaseDataSource.TRACE_DRIVER_CONFIGURATION ドライバー設定に関する情報 com.ibm.db2.jcc.DB2BaseDataSource.TRACE_CONNECTS 接続の情報 com.ibm.db2.jcc.DB2BaseDataSource.TRACE_DRDA_FLOWS クライアントとサーバーの接続に用いられるDRDAプロトコルの制御情報 com.ibm.db2.jcc.DB2BaseDataSource.TRACE_RESULT_SET_META_DATA 結果セットのメタデータ情報 com.ibm.db2.jcc.DB2BaseDataSource.TRACE_PARAMETER_META_DATA パラメータのメタ情報 com.ibm.db2.jcc.DB2BaseDataSource.TRACE_DIAGNOSTICS 各種診断情報 com.ibm.db2.jcc.DB2BaseDataSource.TRACE_SQLJ SQLJに関するトレース情報 com.ibm.db2.jcc.DB2BaseDataSource.TRACE_XA_CALLS XA制御に関するトレース情報(Type2の接続を利用している場合のみ取得可能) com.ibm.db2.jcc.DB2BaseDataSource.TRACE_ALL すべての情報 表5-3-1: トレースレベル一覧
TRACE_NONEおよびTRACE_ALLを除き、これらの整数値は複数指定することが可能です。 その場合は、指定するすべての整数値の論理和を指定してください。
使用例
接続、ステートメントおよび結果セットに対する呼び出しをトレースログ(ここでは/tmp/trace.log)に出力するように設定する例。
import java.sql.*;
import java.io.*;
import java.util.*;
import com.ibm.db2.jcc.*;
public class TraceSample {
private final static String PATH = "/tmp/trace.log";
public static void main(String[] args) {
try {
Class.forName("com.ibm.db2.jcc.DB2Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
return;
}
Connection conn = null;
PreparedStatement ps = null;
ResultSet result = null;
PrintWriter out = null;
try {
Properties props = new Properties();
props.setProperty("user", "user");
props.setProperty("password", "password");
props.setProperty("traceFile", PATH);
props.setProperty("traceLevel",
String.valueOf(
DB2BaseDataSource.TRACE_CONNECTION_CALLS |
DB2BaseDataSource.TRACE_STATEMENT_CALLS |
DB2BaseDataSource.TRACE_RESULT_SET_CALLS
)
);
conn =
DriverManager.getConnection(
"jdbc:db2://localhost:50000/sample",
props);
ps = conn.prepareStatement("SELECT * FROM employee");
result = ps.executeQuery();
while (result.next()) {
System.out.print(result.getInt("EMPNO"));
System.out.print(" ");
System.out.println(result.getString("FIRSTNME"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (result != null) {
try {
result.close();
} catch (SQLException e) {
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
}
}
if (out != null) {
out.close();
}
}
}
}
注意
- JDBCトレースはクライアント側で取得するものです。
- JDBCトレースはパフォーマンスに大きな影響を与えるため、障害発生時の問題判別など、デバッグ用途にのみ利用するようにしてください。