DB2 で各種ログを取得する。  詳しくはここら辺  http://www-6.ibm.com/jp/software/data/developer/column/kantan/index.html  のトレース編を参照  システムモニターの使い方  http://www-6.ibm.com/jp/software/data/developer/library/manual/db2online/db2f0/index.htm    CLI トレースの使い方  http://www-6.ibm.com/jp/software/data/developer/library/manual/db2online/db2p0/db2p060.htm#HDRHDAPPTRACE  db2diag.log の読み方  http://www-6.ibm.com/jp/software/data/developer/library/manual/db2online/db2p0/db2p052.htm#HDRDIAGINT ---------------------------------------------------------------------- ■作業環境 DB2 WE 7.2.2 ---------------------------------------------------------------------- ●db2diag.log  特に何か設定しなくても、DB2 で何か問題があったら  インスタンスオーナーのホームディレクトリ/sqllib/db2dump/ 以下に  db2diag.log というファイルが作成され、エラー情報が記述される。 ---------------------------------------------------------------------- ●イベントトレース  全てインスタンスオーナーで作業する。  1)まずログを取りたいデータベースにコネクトする。    $ db2    db2 => connect to irecs    ※irecs がデータベース名  2)以下のコマンドでイベントトレーサーを登録する。    ※/ini/log/db2/sql/ , /ini/log/db2/lock/ , /ini/log/db2/buf/ というディレクトリが存在し、     インスタンスオーナーに書き込み権限がある事。     >ログが書き込まれるディレクトリ create event monitor sql_ev for statements write to file '/INI/debug/db2ev'    db2 => create event monitor sql_ev for statements write to file '/ini/log/db2/sql'     ※発行された全ての SQL を取得する。      SQL が発行されるとすぐに書き込まれる。    db2 => create event monitor lock_ev for deadlocks write to file '/ini/log/db2/lock'     ※デッドロックが発生するとすぐに書き込まれる。    db2 => create event monitor buf_ev for bufferpools write to file '/ini/log/db2/buf'     ※バッファプールを取得するらしいが...      書き込まれるのが、全てのデータベースコネクションがなくなった時      みたいな為あんまりやくにたたないか?    ※sql_ev,lock_ev,buf_ev とかは自由に名前をつけれる。  3)下記コマンドでトレースを有効にする。    db2 => set event monitor sql_ev state 1    db2 => set event monitor lock_ev state 1    db2 => set event monitor buf_ev state 1    ※トレースを無効にしたい場合は state 0 にする。  4)ログを見る。    書き込まれるログはバイナリでそのままでは読めないので、    下記コマンドでテキストに落とす。        $ db2evmon -db irecs -evm sql_ev > db2_sql_ev2.txt  ※statements の使用は要注意。   JAVA アプリで PreparedStatement 使って 「select * from hoge where hoge2=?」   とかで動的に ? が変化するような実装の場合、ログに残る SQL 文には ? は   ? のまま記録されその時の ? の中身は記録されません。   >役にたたねー。   ファイルサイズ的には 1 クエリーにつき 1kB 位ずつサイズが増えていきます。 ---------------------------------------------------------------------- ●CLI トレース  DB2 クライアント側で設定する事。  例えばアプリケーションサーバーと DB サーバーが別々の場合は、  アプリケーションサーバーで設定する。  1)設定ファイルを変更する。    対象ファイル: インスタンスオーナーのホームディレクトリ/sqllib/cfg/db2cli.ini    に下記行を追加 〜〜〜 ここから 〜〜〜 [COMMON] TRACEPATHNAME=/ini/log/db2/cli TRACE=1 TRACEFLUSH=1 〜〜〜 ここまで 〜〜〜   ※/ini/log/db2/cli/ というディレクトリが存在し、インスタンスオーナーに書き込み権限がある事。    >ログが書き込まれるディレクトリ  2)アプリケーションサーバーを再起動する。    WAS の場合はアプリケーションサーバーの再起動で OK    (プロセスの再起動は必要無し)    /ini/log/db2/cli/ に WAS の「プロセス番号.内部スレッド番号」という名前の    ファイルが WAS 内のスレッド毎に作成される。  3)トレースを無効化する。    それなりに負荷があるらしいのでいらない時はカット。    1)で追加した部分をコメントアウト(行頭に;)する。 〜〜〜 ここから 〜〜〜 ;[COMMON] ;TRACEPATHNAME=/ini/log/db2/cli ;TRACE=1 ;TRACEFLUSH=1 〜〜〜 ここまで 〜〜〜  ※発行された SQL を検索する場合は   StmtOut ってキーワードで grep してみる。   さらにそん時の ? の中身とかは rgbValue ってので grep。   >SQL 文の下の方にあるはず。  ※だが、しかーし   最初にファイルを作成されたタイムスタンプはあるものの、   各処理がいつ行われたかのタイムスタンプは記録されない。   >使えねー。    ※基本的に障害を再現させるときだけ使用し、   正常処理と比較する方法が一般的らしい。