IBM Data Server Driver for JDBC and SQLJ での問題診断

IBM® Data Server Driver for JDBC and SQLJ には、接続および SQL ステートメントの実行中の問題を診断するための診断ツールおよびトレースが含まれています。

データ・サーバー接続のテスト

DB2Jcc ユーティリティーを実行して、データ・サーバーへの接続をテストします。 IBM Data Server Driver for JDBC and SQLJ タイプ 4 接続 または IBM Data Server Driver for JDBC and SQLJ タイプ 2 接続の場合は、 DB2Jcc にデータ・サーバーの URL を指定します。 DB2Jcc はデータ・サーバーへの接続、そして SQL ステートメントと DatabaseMetaData メソッドの実行を試みます。 接続またはステートメントの実行に失敗すると、DB2Jcc は失敗に関する診断情報を提供します。

JDBC トレース・データの収集

以下の手順のいずれかを使用して、トレースを開始します。

手順 1: IBM Data Server Driver for JDBC and SQLJ タイプ 4 接続 または IBM Data Server Driver for JDBC and SQLJ タイプ 2 接続 ( Db2®の場合) 推奨される方法は、 IBM Data Server Driver for JDBC and SQLJ 構成プロパティー・ファイルで db2.jcc.override.traceFile プロパティーまたは db2.jcc.override.traceDirectory プロパティーを設定することによって、トレースを開始することです。 ドライバーの開始前に db2.jcc.tracePolling および db2.jcc.tracePollingInterval プロパティーを設定すれば、ドライバーの実行中にグローバル構成トレース・プロパティーを変更することができます。

手順 2: DataSource インターフェースを使用してデータ・ソースに接続する場合は、以下の方法に従ってトレースを開始します。
  1. DB2BaseDataSource.setTraceLevel メソッドを呼び出して、必要なトレースのタイプを設定します。 デフォルトのトレース・レベルは TRACE_ALL です。 traceLevel 設定のリストについては、「 Common IBM Data Server Driver for JDBC and SQLJ properties for all supported database products 」を参照してください。 複数のタイプのトレースを指定する方法については、 「 IBM Data Server Driver for JDBC and SQLJ」のプロパティー を参照してください。
  2. DB2BaseDataSource.setJccLogWriter メソッドを呼び出して、トレースの宛先を指定し、トレースをオンにします。

手順 3:

DataSource インターフェースを使用してデータ・ソースに接続する場合、javax.sql.DataSource.setLogWriter メソッドを呼び出して、トレースをオンにします。 この方法では、使用可能なトレース・レベルは TRACE_ALL のみです。

DriverManager インターフェースを使用してデータ・ソースに接続する場合、以下の手順を実行して、トレースを開始します。
  1. 必要なトレースのタイプに対して、 info パラメーターまたは url パラメーターに traceLevel プロパティーを設定して DriverManager.getConnection メソッドを呼び出します。 デフォルトのトレース・レベルは TRACE_ALL です。 traceLevel 設定のリストについては、「 Common IBM Data Server Driver for JDBC and SQLJ properties for all supported database products 」を参照してください。 複数のタイプのトレースを指定する方法については、 「 IBM Data Server Driver for JDBC and SQLJ」のプロパティー を参照してください。
  2. DriverManager.setLogWriter メソッドを呼び出して、トレースの宛先を指定し、トレースをオンにします。

接続が確立された後、トレースをオフにしたりオンに戻したり、トレースの宛先を変更したり、DB2Connection.setJccLogWriter メソッドを使用してトレース・レベルを変更したりできます。 トレースをオフにするには、logWriter 値を null に設定します。

logWriter プロパティーはタイプ java.io.PrintWriter のオブジェクトです。 アプリケーションが java.io.PrintWriter オブジェクトを処理できない場合、traceFile プロパティーを使用してトレース出力の宛先を指定できます。 traceFile プロパティーを使用するには、logWriter プロパティーを null に設定し、traceFile プロパティーをドライバーがトレース・データを書き込むファイルの名前に設定します。 このファイルおよびこのファイルが置かれているディレクトリーは書き込み可能でなければなりません。 ファイルが既に存在している場合、ドライバーがこのファイルを上書きします。

手順 4: DriverManager インターフェースを使用している場合は、ドライバーのロード時に URL の一部として traceFile プロパティーと traceLevel プロパティーを指定します。 以下に例を示します。
String url = "jdbc:db2://sysmvs1.stl.ibm.com:5021/san_jose" +
 ":traceFile=/u/db2p/jcctrace;" +
 "traceLevel=" + com.ibm.db2.jcc.DB2BaseDataSource.TRACE_DRDA_FLOWS + ";";

手順 5: DB2TraceManager メソッドを使用します。 DB2TraceManager クラスは、すべてのタイプのログ書き込みプログラムによるトレースを中断および再開する機能を提供します。

構成プロパティーを使用してトレースを開始する例: 構成パラメーターを使用してトレース・データを収集する完全な例については、 JDBC トレースを開始するための構成プロパティーの使用例を参照してください。

トレース・サンプル・プログラム: IBM Data Server Driver for JDBC and SQLJでのトレース用プログラムの完全な例については、 IBM Data Server Driver for JDBC and SQLJでのトレース・プログラムの例を参照してください。

カスタマイズまたはバインド時の SQLJ トレース・データの収集

SQLJ のカスタマイズまたはバインド処理時に問題を診断するためにトレース・データを収集するには、db2sqljcustomize または db2sqljbind バインド・ユーティリティーの実行時に -tracelevel および -tracefile オプションを指定します。

Db2 データ・サーバーまたはデータ共用グループへの接続に関する診断データの収集

診断データは、構成プロパティー db2.jcc.outputDirectory によって指定されたディレクトリー内のファイルに書き込まれます。 ファイルの形式は次のとおりです。
jccDump_timestamp_random-number_i.log
  • timestamp は、データが書き込まれるときのタイム・スタンプです。
  • random-number は、ランダムに生成された正の整数です。
  • i は 0 または 1 です。

ファイルの最大サイズは、約 2MB です。 アプリケーションが最初のトレース・レコードを書き込むときに、ドライバーは i = 0 のファイルを作成します。 その後ドライバーは、ファイルにトレース・データを書き込みます。 ファイルのサイズが約 2MB に達すると、ドライバーはファイルの名前を変更します。 新しい名前は元の名前と同じですが、I は現在 1 になっています。 ドライバーは、アプリケーションが完了するまでこのサイクルを継続します。 ファイル内の各ダンプ項目には、タイム・スタンプ、JVM 名、スレッド ID、データ・ソース ID、および接続 ID の詳細が含まれているため、例外のソースを見つけることができます。

重要:
  • 最大ファイル・サイズが正確に 2MBではありません。 読みやすくするために、最後のダンプ項目が単一ファイルに完全に記録されるように、2 MB を超える場合があります。
  • Java™ プロセスを強制終了して JVM を停止すると、ファイル・システム上に .lck ファイルが作成される可能性があります。 これらの .lck ファイルは手動で削除する必要があります。

データ・サーバー用に収集するデータの指定: db2.jcc.diagLevelExceptionCode グローバル構成プロパティーを設定することにより、診断データを収集する SQL エラー・コードまたは SQL 警告コードを指定します。

値 db2.jcc.diagLevelExceptionCode が指定されていない場合、診断データは収集されません。

db2.jcc.diagLevelExceptionCode が -1 に設定されている場合、すべての SQL エラー・コードに関する診断情報が収集されます。

SQL エラー・コードは、符号、接頭部としてマイナス (-) 符号、または接尾部として文字 nを使用せずに指定することができます。 SQL 警告コードには、接頭部として正符号 (+) を付けることも、接尾部として文字 pを付けることもできます。

複数の SQL エラー・コードまたは SQL 警告コードを指定する場合は、それらのコードをコンマで区切る必要があります。

次に例を示します。

SQL エラー・コード -204 の診断情報を収集するには、以下のいずれかの値を指定します。
  • db2.jcc.diagLevelExceptionCode=204
  • db2.jcc.diagLevelExceptionCode=-204
  • db2.jcc.diagLevelExceptionCode=204n
SQL 警告コード +222 の診断情報を収集するには、以下のいずれかの値を指定します。
  • db2.jcc.diagLevelExceptionCode=+222
  • db2.jcc.diagLevelExceptionCode=222p
SQL エラー・コード -204、-30108、および -4499 の診断情報の収集を指定する例をいくつか以下に示します。
  • db2.jcc.diagLevelExceptionCode=-204,-30108,-4499
  • db2.jcc.diagLevelExceptionCode=204,30108n、4499
  • db2.jcc.diagLevelExceptionCode=204n,30108,4499n
SQL エラー・コード -30108 および SQL 警告コード +100 と +222 の診断情報の収集を指定する例をいくつか以下に示します。
  • db2.jcc.diagLevelExceptionCode=+100,-30108,222p
  • db2.jcc.diagLevelExceptionCode=100p,30108,+222

データ共有グループのデータ収集の指定: db2.jcc.traceLevel または db2.jcc.override.traceLevel グローバル構成プロパティー、あるいは traceLevel Connection または DataSource プロパティーが TRACE_SYSPLEX (X'80000 ') に設定されている場合、 IBM Data Server Driver for JDBC and SQLJ は、サーバー・リスト、自動クライアント・リルートおよびワークロード・バランシング・プロパティー値、トランスポート・プール統計、および特殊レジスター値など、データ共有グループに関するデータを収集します。

SQLJ シリアライズド・プロファイルに関する情報のフォーマット

profp ユーティリティーは、シリアライズド・プロファイル内の各 SQLJ 文節に関する情報をフォーマットします。 profp ユーティリティーのフォーマットは次のとおりです。
Read syntax diagramSkip visual syntax diagramprofpserialized-profile-name

エラーが発生した接続のシリアライズド・プロファイルに対して profp ユーティリティーを実行します。 例外がスローされると、Java スタック・トレースが生成されます。 例外がスタック・トレースからスローされたときに、どのシリアライズド・プロファイルが使用されていたかを判別できます。

SQLJ カスタマイズ済みシリアライズド・プロファイルに関する情報のフォーマット

db2sqljprint ユーティリティーは、 IBM Data Server Driver for JDBC and SQLJ用にカスタマイズされたシリアライズド・プロファイル内の各 SQLJ 文節に関する情報をフォーマットします。

エラーが発生した接続のカスタマイズ済みシリアライズド・プロファイルに対して db2sqljprint ユーティリティーを実行します。