目次


DB2トレース収集

Comments

はじめに

この文書の目的は、IBM DB2® Universal Databaseの使用中に発生する問題に対して自己診断するための基本的トラブルシューティング方法を紹介することです。この文書で扱う範囲には、DB2サーバー/クライアントの保守レベルやFixpak・レベルを調べる方法などが含まれます。db2diag.logファイルなど、基本的トラブルシューティングのためのロギング・ツールに関して、また、CLIトレース、JDBCトレース、DB2トレースなど、種々のトレースの作成方法についても説明します。

この文書は「DB2 UDB 問題判別の手引き」の代わりとしてではなく、診断データを収集する際のクイック・リファレンスとして使用してください。ここに示される内容とともに、「DB2 UDB メッセージ解説書」や「問題判別の手引き」を参照することによって、ユーザーは自分自身でDB2に関する問題を解決できるようになります。この文書のみでは必ずしも問題の完全な解決には至らないまでも、DB2のサービス担当者に連絡する前にユーザーが自身で問題の原因を特定することができれば、助かります。

DB2Fixpakのレベルの確認

DB2の使用中に問題が発生した際、まず行うべきことは、クライアントとサーバーにDB2の最新のFixpakが適用されているかどうかを確認することです。多くの場合、それが修正済みの問題なら、最新のFixpakを適用するだけで問題は解決します。最新のFixpakは、DB2 UDBおよびDB2 コネクトオンラインサポートページから入手できます。

社外またはお客様から、IBMに対して問題の報告があったときは、通常、APARが作成され、その問題(欠陥)の追跡が行われます。IBMによってDB2の新たなFixpak・レベルが公開される際には、そのFixpakにはAPARリスト(FixpakのAPARに関する簡単な説明を記載)が付属します。このリストにはすべてのAPARがリストされていますが、社内で報告された問題に関しては正式なAPARを作成せずにコードの訂正が行われる場合が多いため、このリストはすべての問題点を網羅しているわけではありません。発生した問題がリストに掲載されていない場合でも、リストにない修正によって問題が解決することもあるため、Fixpakを適用してみることをお勧めします。

最新のFixpakがシステムに適用されているか確認するには、クライアント上でdb2levelコマンドを実行(クライアント・コードのDB2レベルを確認)し、次に、データベースが常駐するDB2サーバー上でもこのコマンドを実行します。このコマンドは、DB2 コマンド・ウィンドウから、あるいはUNIXプラットフォームのインスタンス・ユーザーIDのログイン・プロンプトから実行できます。このコマンドは、コマンド・ライン・プロセッサー(CLP)では実行できません。

E:\SQLLIB\BIN>db2level

Db2levelからは、次の表示が返されます。

DB21085I  インスタンス 
"DB2" はレベル識別子"03010105" と通知トークン 
"DB2 v7.1.0.41", "n010426" , "WR21254"を指定して、
DB2 コード・リリース "SQL07020" を使用します。

この中で最も重要な部分は、最後のトークンです。ここでは、WR21254がシステムのFixpak・レベルを表し、WR21254がDB2バージョン7.1のFP3であるということになります。

システムのFixpak・レベルを確認後、上記Web URLで、これがDB2の最新Fixpakであるか確認します。最新版でない場合、最新のFixpakを適用してから手順を再度実行し、それでもまだ問題が発生する場合には、DB2サポート・サービスに連絡してください。Fixpakには多くの修正が含まれているため、「まず真っ先にFixpakを適用してみる」ことをDB2サポート・サービスは推奨しています。

db2diagレベルの使用

問題の発生原因がクライアント側/サーバー側のいずれである場合にも、db2diag.logという診断ファイルがDB2によって作成されます。このdb2diag.logには警告や重大なエラーなどに関する情報が記載されるため、問題の究明に際してまず最初に使用すべきファイルです。DB2に発生している問題に関する何らかの手掛かりを得るには、まずこのdb2diag.logファイルを調べるとよいでしょう。問題がクライアント・マシン上で発生している場合には、まずクライアントのdb2diag.logファイルによって、DB2サーバーからの送信内容を調べます。問題がDB2サーバー上で発生している場合には、このファイルはやはりサーバー上に作成されます。

このファイルには、「警告」および「重大なエラー」に関する情報が記載されますが、それらの情報レベルはデータベース・マネージャーの構成パラメーターdiaglevelの設定によって決まります。デフォルト値「3」では、エラーと警告がすべて記載されます。DB2によるすべての診断情報を収集するには、この値を「4」に設定します。この設定「4」は、リソースに対する負荷が大きいため、この設定は、問題を究明する場合にのみに使用し、問題修正が終了後はまた設定「3」に戻してください。このdb2diag.logファイルは累積ファイルですから、現在発生している問題以外の情報も含まれます。そのため、発生した問題に関連する情報をファイルから取り出す前に、既存のdb2diag.logファイル名を変更し、その後、最小ステップのみを実行してその問題を再現してみるとよいでしょう。これによって、ファイル上の余分な情報を取り除くことができます。

DB2によって書き込まれる情報の範囲を制御するdiaglevel値を変更するには、次のコマンドを使用します。

db2 update dbm cfg using diaglevel 4
db2stop

次に、以下のコマンドでDB2を再起動します。

db2start

作成されるdb2diag.logファイルの格納場所は、UNIXとIntel® の各プラットフォームにより異なります。32ビットのWindows® プラットフォームでは、デフォルトで次のディレクトリーに格納されます。

d:\sqllib\db2\db2diag.log

ここでは、db2がインスタンス名です。

また、UNIXプラットフォームの場合、デフォルトで次の場所に格納されます。

$/home/db2inst1/sqllib/db2dump/db2diag.log

ここでは、db2inst1がインスタンス名です。

また、このファイルを別のディレクトリーに格納するには、次のコマンドを使用します。

db2 update dbm cfg using diagpath d:\myerrors\

ここでは、d:\myerrorsはdb2diag.logを格納する場所です。この場合も、データベース・マネージャーの構成ファイル(dbm cfg)に対する変更は、DB2をいったん終了して(db2stop)、再起動する(db2start)ことにより有効になります。

db2diag.logのサンプル
以下のdb2diag.logファイルのサンプルは、ディスクの空き容量がないというエラー状態を示しています。

2001-10-05-13.22.03.467322   Instance:db2v72   Node:000
PID:23520(db2agent (SAMPLE))   Appid:*LOCAL.db2v72.011005182037
oper_system_services  sqloSetFileAccessMode   Probe:36   Database:SAMPLE
errno: 0000 0002                                     ....

2001-10-05-19.15.59.394579   Instance:db2v72   Node:000
PID:5648(db2wdog)   Appid:none
oper_system_services  sqloRunInstance   Probe:102
DiagData
4372 6974 6963 616c 2045 7272 6f72 3a20       Critical Error:
5368 7574 7469 6e67 2064 6f77 6e20 7379       Shutting down sy
7374 656d 00                                  stem.

2001-10-05-19.15.59.739726   Instance:db2v72   Node:000
PID:5648(db2wdog)   Appid:none
oper_system_services  sqloRunInstance   Probe:105
DiagData
0000 0102 ffff ffff                           ........

2001-10-05-19.15.59.907519   Instance:db2v72   Node:000
PID:5648(db2wdog)   Appid:none
base_sys_utilities  sqleCleanupResources   Probe:5
DiagData
0000 0102                                     ....

2001-10-10-12.53.21.459787   Instance:db2v72   Node:000
PID:17146(db2bp)   Appid:
oper_system_services  sqlo_access_listen_queue   Probe:1
0000 0002                                     ....

2001-10-10-13.02.12.980199   Instance:db2v72   Node:000
PID:20640(db2agent (instance))   Appid:none
oper_system_services  sqloopenp   Probe:36
errno: 0000 001a                                     ....

2001-10-10-13.02.14.628298   Instance:db2v72   Node:000
PID:20640(db2agent (instance))   Appid:none
oper_system_services  sqloopenp   Probe:36
errno: 0000 001a                                     ....

2001-10-10-13.02.14.723173   Instance:db2v72   Node:000
PID:20640(db2agent (instance))   Appid:none
oper_system_services  sqloopenp   Probe:36
errno: 0000 001a                                     ....

2001-10-10-19.06.56.163289   Instance:db2v72   Node:000
PID:25338(db2bp)   Appid:*LOCAL.db2v72.011010234522
oper_system_services  sqlowque   Probe:5
0000 0004                                     ....

2001-10-10-19.31.24.731619   Instance:db2v72   Node:000
PID:20752(db2agent (BLOBTEST))   Appid:*LOCAL.db2v72.011010204440
buffer_pool_services  sqlbSMSDirectWrite   Probe:99   Database:BLOBTEST
SMS Tablespace 2(USERSPACE1) is full.  Detected on Container 0.
2001-10-10-19.31.24.851541   Instance:db2v72   Node:000
PID:20752(db2agent (BLOBTEST))   Appid:*LOCAL.db2v72.011010204440
buffer_pool_services  sqlbSMSDirectWrite   Probe:825   Database:BLOBTEST
DIA3612C Disk was full.
ZRC=FFFFD60C

メッセージを伴わない戻りコードの解釈
db2diag.logファイルの内容を解釈するには、システム異常を示すエラー・メッセージをファイルの中から見つけなければなりません(DIAエラー/SQL エラー)。ほとんどの場合、エラー・メッセージにはDIAxxxxxという記述がありますが、例外もあります。DIAエラーには、16進数値で示された RC=xxxxxxxxという行があります。この値は10進数に変換してSQLコードに対応させることもできますが、対応していない場合、その16進数値はDB2 内部戻りコードです。SQLコード値は「メッセージ解説書」に、また、DB2 内部戻りコード値は「問題判別の手引き」に示されています。基本は、まず、この値を10進数に変換し、それがSQLコードのいずれかに一致するかを調べることです。一致しない場合には、その16進数値がDB2 内部戻りコードのいずれかに対応しているはずです。その値が「問題判別の手引き」のリストにない場合は、DB2サポート・サービスに連絡してください。

このエラー・コードがffff nnnnという形式なら、そのままで解釈できます。nnnn ffffという形式は、バイトの入れ換えをしてから解釈します。このバイトの入れ換えは、最初の4文字と最後の4文字を交換し、次に5番目と6番目の文字をそれぞれ、7番目と8番目の文字と交換して行います。たとえば、戻されたエラー・コードが0ae6 ffffであるとすると、この変換によってffff e60aとなります。上記の診断ファイルに示されたエラーが、ZRC=FFFFE60Aのみで、テキスト・メッセージがない場合、その値を10進数に変換することが必要です。

16進数変換ツールはなんでもかまいませんが、この例では、Windows NT®/Windows 2000®の電卓を使用しました。「プログラム」 -> 「アクセサリ」 -> 「電卓」を選択して、以下の手順に従ってffffe60aを変換し、それがSQLコードか、またはDB2 内部戻りコードかを調べます。

  1. 電卓が、「表示 」->「関数電卓」に設定されていることを確認する。
  2. 16進数を選択する。
  3. Fを8つ入力する。
  4. 「-」を入力する。
  5. 「FFFFE60A」と入力する。
  6. 「=」を入力すると、19F5という結果が出る。
  7. 「+」を入力する。
  8. 「1」を入力する。
  9. 「=」を入力すると、19F6という結果が出る。
  10. 10進数を選択すると、6646という結果が出る。

DB2コマンド・ウィンドウから、6646という値に対して次のコマンドを実行し、それがSQLコードかを調べます。

db2 ? SQL6646

これは有効なSQLコードではないため、E60Aは「問題判別の手引き」のDB2 内部戻りコードリストにあります。この場合、E60Aは、ファイルが存在しないということを意味しています。

CLIトレース収集

CLI、ODBC、SQLJのいずれかを使用するDB2アプリケーションの開発および実行には、DB2 CLIドライバーを使用します。この種のアプリケーション開発においては、そのアプリケーションがどのようなデータを送信しているか、また、DB2サーバーがアプリケーションに対してどのようなデータを戻しているかを調べることが役立つ場合があります。これは、CLIトレース収集によって、実行できます。CLIトレース収集をするには、db2cli.iniファイル(Intelプラットフォームでは\sqllibディレクトリーに、UNIXプラットフォームではsqllib/cfgパスにある)を変更し、トレース機能を有効にすることが必要です。

db2cli.iniファイルでは、すべてのデータベースに対するCLIトレースを収集する[COMMON]セクションか、特定のデータベースに関するトレースのみを収集する[DBNAME]セクションのいずれかによってトレースを有効にします。たとえば、すべてのデータベースのCLIトレースを収集するには、db2cli.iniの内容を次のように変更します。

[COMMON]
Trace=1
TraceFileName=d:\temp\clitrace.txt
TraceFlush=1

サンプル・データベースのトレースのみを作成するには、ファイルを次のように変更します。

[SAMPLE]
Trace=1
TraceFileName=d:\temp\clitrace.txt
TraceFlush=1

db2cli.iniファイルを変更後、アプリケーションを再実行することによって、情報を収集することができます。トレースはシステム・リソースを消費するため、アプリケーションのデバッグ終了後、必ずTrace=0に設定してトレースを無効にします。

CLIトレースのサンプル
下記は、CLIトレース・ファイルのサンプルです。この中で記号

-->

は、アプリケーションからDB2サーバーに送信されたデータを表示します。また、次の記号

<---

は、DB2サーバーから戻されたデータを示します。この種のトレースは、アプリケーションのエラーの原因がアプリケーションからのデータの送信であるのか、あるいはDB2サーバーからのデータの送信であるのかを判断するうえで役立ちます。

[ Process: 1428, Thread: 632 ]
[ Date & Time:          09-06-2001 09:31:27.000007 ]
[ Product:              QDB2/NT 7.1.0.41 ]
[ Level Identifier:     03010105 ]
[ CLI Driver Version:   07.02.0000 ]
[ Informational Tokens: "DB2 v7.1.0.41","n010426","WR21254" ]

SQLAllocHandle( fHandleType=SQL_HANDLE_ENV, hInput=0:0, phOutput=&001289ec )
    ---> Time elapsed - 0 seconds

SQLAllocHandle( phOutput=0:1 )
    <--- SQL_SUCCESS   Time elapsed - +1.771300E-002 seconds

SQLSetEnvAttr( hEnv=0:1, fAttribute=SQL_ATTR_USE_LIGHT_OUTPUT_SQLDA, vParam=0, cbParam=0 )
    ---> Time elapsed - +5.200000E-005 seconds

SQLSetEnvAttr( )
    <--- SQL_SUCCESS   Time elapsed - +1.386500E-002 seconds

SQLAllocHandle( fHandleType=SQL_HANDLE_DBC, hInput=0:1, phOutput=&00128a44 )
    ---> Time elapsed - +1.070000E-004 seconds

SQLAllocHandle( phOutput=0:1 )
    <--- SQL_SUCCESS   Time elapsed - +2.480000E-004 seconds

SQLSetConnectAttr( hDbc=0:1, fOption=SQL_ATTR_AUTOCOMMIT, pvParam=NULL, iStrLen=-3 )
    ---> Time elapsed - +3.300000E-005 seconds

SQLSetConnectAttr( )
    <--- SQL_SUCCESS   Time elapsed - +6.400000E-005 seconds

SQLConnect( hDbc=0:1, szDSN="sample", cbDSN=-3, szUID="", cbUID=-3, szAuthStr="",
cbAuthStr=-3 )
    ---> Time elapsed - +7.045000E-003 seconds
( DBMS NAME="DB2/NT", Version="07.02.0000", Fixpack="0x23010105" )

( Application Codepage=1252, Database  Codepage=1252, Char Send/Recv Codepage=1252,
Graphic Send/Recv Codepage=1252, iGraphic Codepage=1252 )


SQLConnect( )
    <--- SQL_SUCCESS   Time elapsed - +4.130200E-002 seconds
( DSN=""SAMPLE"" )

( UID=" " )

( PWD="*" )

( DBALIAS="SAMPLE" )

SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=&0012ff34 )
    ---> Time elapsed - +4.455000E-003 seconds

SQLAllocHandle( phOutput=1:1 )
    <--- SQL_SUCCESS   Time elapsed - +4.100000E-004 seconds

SQLProcedureColumns( hStmt=1:1, szProcCatalog=Null Pointer, cbProcCatalog=0,
szProcSchema="%",cbProcSchema=-3, szProcName="RICH1()", cbProcName=-3,
szColumnName="%", cbColumnName=-3 )
    ---> Time elapsed - +3.800000E-005 seconds
( StmtOut="SELECT PROCSCHEMA, PROCNAME, PARMNAME, TYPESCHEMA, TYPENAME, LENGTH,
SCALE, PARM_MODE, ORDINAL, CODEPAGE FROM "SYSIBM".SYSPROCPARMS WHERE PROCNAME =
'RICH1()' ORDER BY 1, 2, 9" )


SQLProcedureColumns( )
    <--- SQL_SUCCESS   Time elapsed - +4.703370E-001 seconds

SQLBindCol( hStmt=1:1, iCol=2, fCType=SQL_C_CHAR, rgbValue=&001287d4, cbValueMax=129,
pcbValue=&001287d0 )
    ---> Time elapsed - +4.500000E-005 seconds

SQLBindCol( )
    <--- SQL_SUCCESS   Time elapsed - +6.700000E-005 seconds

SQLBindCol( hStmt=1:1, iCol=4, fCType=SQL_C_CHAR, rgbValue=&0012886c, cbValueMax=129,
pcbValue=&00128868 )
    ---> Time elapsed - +2.100000E-005 seconds

SQLBindCol( )
    <--- SQL_SUCCESS   Time elapsed - +5.100000E-005 seconds

SQLBindCol( hStmt=1:1, iCol=5, fCType=SQL_C_SHORT, rgbValue=&001287c8, cbValueMax=2,
pcbValue=&001287c4 )
    ---> Time elapsed - +2.000000E-005 seconds

SQLBindCol( )
    <--- SQL_SUCCESS   Time elapsed - +5.000000E-005 seconds

SQLBindCol( hStmt=1:1, iCol=6, fCType=SQL_C_SHORT, rgbValue=&00128a34, cbValueMax=2,
pcbValue=&00128a30 )
    ---> Time elapsed - +2.000000E-005 seconds

SQLBindCol( )
    <--- SQL_SUCCESS   Time elapsed - +5.000000E-005 seconds

SQLBindCol( hStmt=1:1, iCol=8, fCType=SQL_C_LONG, rgbValue=&0012ff40, cbValueMax=4,
pcbValue=&0012ff3c )
    ---> Time elapsed - +1.900000E-005 seconds

SQLBindCol( )
    <--- SQL_SUCCESS   Time elapsed - +5.100000E-005 seconds

SQLBindCol( hStmt=1:1, iCol=10, fCType=SQL_C_SHORT, rgbValue=&00129ae8, cbValueMax=2,
pcbValue=&00129ae4 )
    ---> Time elapsed - +1.900000E-005 seconds

SQLBindCol( )
    <--- SQL_SUCCESS   Time elapsed - +5.100000E-005 seconds

SQLBindCol( hStmt=1:1, iCol=18, fCType=SQL_C_LONG, rgbValue=&0012885c, cbValueMax=4,
pcbValue=&00128858 )
    ---> Time elapsed - +1.900000E-005 seconds

SQLBindCol( )
    <--- SQL_SUCCESS   Time elapsed - +5.000000E-005 seconds

SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=&0012879c )
    ---> Time elapsed - +1.490000E-004 seconds

SQLAllocHandle( phOutput=1:3 )
    <--- SQL_SUCCESS   Time elapsed - +2.387000E-003 seconds

SQLFetch( hStmt=1:1 )
    ---> Time elapsed - +9.400000E-005 seconds
SQLFetch( )
    <--- SQL_NO_DATA_FOUND   Time elapsed - +2.153700E-002 seconds

SQLFreeHandle( fHandleType=SQL_HANDLE_STMT, hHandle=1:1 )
    ---> Time elapsed - +5.800000E-005 seconds

SQLFreeHandle( )
    <--- SQL_SUCCESS   Time elapsed - +5.780000E-004 seconds

SQLPrepare( hStmt=1:3, pszSqlStr="CALL RICH1() )", cbSqlStr=-3 )
    ---> Time elapsed - +4.300000E-005 seconds
( StmtOut="CALL RICH1() )" )

SQLPrepare( )
    <--- SQL_SUCCESS   Time elapsed - +2.100000E-004 seconds

SQLExecute( hStmt=1:3 )
    ---> Time elapsed - +3.000000E-005 seconds
( return=0 )

SQLExecute( )
    <--- SQL_SUCCESS   Time elapsed - +7.857780E-001 seconds

SQLNumResultCols( hStmt=1:3, pcCol=&00128768 )
    ---> Time elapsed - +4.600000E-005 seconds

SQLNumResultCols( pcCol=0 )
    <--- SQL_SUCCESS   Time elapsed - +4.700000E-005 seconds

SQLFetch( hStmt=1:3 )
    ---> Time elapsed - +7.206000E-003 seconds

SQLFetch( )
    <--- SQL_ERROR   Time elapsed - +1.956500E-002 seconds

SQLMoreResults( hStmt=1:3 )
    ---> Time elapsed - +7.000000E-005 seconds
( Unretrieved error message="CLI0115E  Invalid cursor state. SQLSTATE=24000" )

JDBCトレース収集

JDBCアプリケーションを開発している場合、JDBCトレースによって、さらに別の情報を取り出すことができます。このトレースも、やはりdb2cli.iniファイルの内容を変更することによって有効にすることができます。

変更するエントリーの場所はこの場合も、[COMMON]セクションか特定のデータベース名のあるセクションで、次のように設定します。

[COMMON]
JDBCTrace=1
JDBCTracePathname=d:\temp
JDBCFlush=1

db2cli.iniファイルの中で、TRACEFILENAME キーワード・オプションを使用し、そこに完全なパスを指定したファイル名がある場合は、そのキーワードに指定されている名前によってトレース・ファイルを簡単に見つけることができます。JDBCTRACEPATHNAME というキーワードを使用している場合、ファイルはそのキーワードで指定されたディレクトリーに作成されます。1組のファイルが作成され、アプリケーションのプロセスIDがその名前となり、また、それぞれ固有のスレッドに対するシーケンス番号が拡張子となります。たとえば、作成されたファイルが65442.0、65442.1、65443.2の場合、65442がアプリケーションのプロセスIDとなります。

JDBCトレースのサンプル
以下は、JDBCトレースのサンプルで、最後のエラーはデータベース・マネージャーが起動されていないことを示しています。

========================================================
|    Trace beginning on 2001-3-1 15:20:51.608
========================================================
System Properties:
------------------
java.runtime.name = Java(TM) 2 Runtime Environment, Standard Edition
sun.boot.library.path = /usr/local/jdk/130/jre/lib/sparc
java.vm.version = 1.3.0
java.vm.vendor = Sun Microsystems Inc.
java.vendor.url = http://java.sun.com/
path.separator = :
java.vm.name = Java HotSpot(TM) Client VM
file.encoding.pkg = sun.io
java.vm.specification.name = Java Virtual Machine Specification
user.dir = /export/home/pace2
java.runtime.version = 1.3.0
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
os.arch = sparc
java.io.tmpdir = /var/tmp/
line.separator =
java.vm.specification.vendor = Sun Microsystems Inc.
java.awt.fonts =
os.name = SunOS
java.library.path =
/usr/local/jdk/130/bin/../jre/lib/sparc/client:/usr/local/jdk/130/bin/../jre/lib/sparc:
:/usr/local/jdk/130/bin/../jre/../lib/sparc:/usr/local/oracle/product/8.0.6/lib:/usr
/local/OptimizeItDemo/lib:/usr/local/jdk/130/bin:/usr/lib:/usr/ucblib:/usr/openwin/lib:
/usr/local/lib:/export/home/db2inst1/sqllib/lib:/usr/lib
java.specification.name = Java Platform API Specification
java.class.version = 47.0
os.version = 5.6
user.home = /export/home/pace2
user.timezone = America/Chicago
java.awt.printerjob = sun.awt.motif.PSPrinterJob
file.encoding = ISO8859-1
java.specification.version = 1.3
user.name = pace2
java.class.path =
/export/home/pace2/classes/HRLoaderProps.jar:.:/export/home/pace2/customcode:/export/home
/pace2/conv_classes:/export/home/pace2/classes/pace2.jar:/export/home/pace2/classes
/pace2_ca_engine.jar:/export/home/pace2/classes/CompAdminRes.jar:/export/home/pace2
/classes:/export/home/pace2/classes/Loader.jar:/export/home/pace2/classes
/engwrapperclasses.zip:/export/home/pace2/classes/CMParallelAPI.zip:/export/home/pace2
/classes/CompAdminExt.jar:/export/home/pace2/classes/xml4j.jar:/export/home/pace2/classes
/xml.jar:/export/home/pace2/classes/classes111.zip:/opt/IBMdb2/V6.1/java/db2java.zip:/export
/home/pace2/classes/Chart.jar:/export/home/pace2/classes/CMEngine.zip:/export/home/pace2
/classes/ffchtml.jar:/export/home/pace2/classes/ffchtmlsamples.jar:/export/home/pace2
/classes/IReport.zip:/export/home/pace2/classes/jgl3.1.0.jar:/export/home/pace2/classes
/jndi.jar:/export/home/pace2/classes/repl.jar:/export/home/pace2/classes/scbb.jar:/export
/home/pace2/classes/scbbconv.jar:/export/home/pace2/classes/SCFormula.zip:/export/home
/pace2/classes/servlet.jar:/export/home/pace2/classes/SFDashboard.zip:/export/home/pace2
/classes/UIObjects.zip:/export/home/pace2/classes/UIObjectsResources.zip:/export/home/pace2
/classes/updatemd.jar:/export/home/pace2/classes/WebControlStore.zip:/export/home/pace2
/classes/WebControlStoreRes.zip:/export/home/pace2/classes/WebGUIControls.zip:/export/home
/pace2/classes/WebGUIFiles.zip:/export/home/pace2/classes/WebGUIResources.zip:/usr/local
/OptimizeItDemo/lib/optit.jar:/export/home/db2inst1/sqllib/java/sqlj.zip:/export/home
/db2inst1/sqllib/java/db2java.zip:/export/home/db2inst1/sqllib/java/runtime.zip:.
java.vm.specification.version = 1.0
java.home = /usr/local/jdk/130/jre
user.language = en
java.specification.vendor = Sun Microsystems Inc.
java.vm.info = interpreted mode
java.version = 1.3.0
java.ext.dirs = /usr/local/jdk/130/jre/lib/ext
sun.boot.class.path =
/usr/local/jdk/130/jre/lib/rt.jar:/usr/local/jdk/130/jre/lib/i18n.jar:/usr/local/jdk
/130/jre/lib/sunrsasign.jar:/usr/local/jdk/130/jre/classes
java.vendor = Sun Microsystems Inc.
file.separator = /
java.vendor.url.bug = http://java.sun.com/cgi-bin/bugreport.cgi
sun.cpu.endian = big
sun.io.unicode.encoding = UnicodeBig
user.region = US
sun.cpu.isalist = sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc
----------------------------------------

jdbc.app.DB2ConnectionTrace -> prepareStatement( SELECT COUNT(*) from MVSTAGEI.MVTPERSON)
(2001-3-1 15:20:51.630)
| Connection handle = 3
| jdbc.app.DB2PreparedStatementTrace -> DB2Statement( con, 1003, 1007 )
(2001-3-1 15:20:51.631)
| jdbc.app.DB2PreparedStatementTrace <- DB2Statement() [Time Elapsed = 0.019]
| jdbc.app.DB2PreparedStatementTrace -> DB2PreparedStatement( " SELECT COUNT(*) from
MVSTAGEI.MVTPERSON", con, 1003, 1007 ) (2001-3-1 15:20:51.672)
| jdbc.app.DB2PreparedStatementTrace <- DB2PreparedStatement() [Time Elapsed = 0.0030]
| jdbc.app.DB2PreparedStatementTrace -> DB2PreparedStatement( SELECT COUNT(*) from
MVSTAGEI.MVTPERSON) (2001-3-1 15:20:51.676)
| | Statement handle = 3:1
| jdbc.app.DB2PreparedStatementTrace <- DB2PreparedStatement
jdbc.app.DB2ConnectionTrace <- prepareStatement - Time Elapsed = 0.047

jdbc.app.DB2PreparedStatementTrace -> executeQuery() (2001-3-1 15:20:51.685)
| Statement handle = 3:1
| jdbc.app.DB2PreparedStatementTrace -> execute2() (2001-3-1 15:20:51.687)
| | 20: rowCount = -1
| | 20: colCount = 1
| jdbc.app.DB2PreparedStatementTrace <- execute2() [Time Elapsed = 0.0040]
| jdbc.app.DB2ResultSetTrace -> DB2ResultSetTrace( stmt,1 ) (2001-3-1 15:20:51.691)
| | Statement handle = 3:1
| jdbc.app.DB2ResultSetTrace <- DB2ResultSetTrace
jdbc.app.DB2PreparedStatementTrace <- executeQuery - Time Elapsed = 0.0060

jdbc.app.DB2ResultSetTrace -> next (2001-3-1 15:20:51.693)
| Statement handle = 3:1
| jdbc.app.DB2ResultSetTrace -> clearIsList (2001-3-1 15:20:51.694)
| | Statement handle = 3:1
| jdbc.app.DB2ResultSetTrace <- clearIsList - Time Elapsed = 0.0
jdbc.app.DB2ResultSetTrace <- next - Time Elapsed = 0.0020

jdbc.app.DB2ResultSetTrace -> getObject( 1 ) (2001-3-1 15:20:51.697)
| Statement handle = 3:1
| jdbc.app.DB2ResultSetTrace -> getColType( 1, true ) (2001-3-1 15:20:51.698)
| | Statement handle = 3:1
| | 10: sqlType = 4
| jdbc.app.DB2ResultSetTrace <- getColType - Time Elapsed = 0.0010
| jdbc.app.DB2ResultSetTrace -> getObject( 1, 4 ) (2001-3-1 15:20:51.701)
| | Statement handle = 3:1
| | jdbc.app.DB2ResultSetTrace -> getObject( 1, 4, -1 ) (2001-3-1 15:20:51.702)
| | | Statement handle = 3:1
| | | jdbc.app.DB2ResultSetTrace -> getInt( 1 ) (2001-3-1 15:20:51.703)
| | | | Statement handle = 3:1
| | | | jdbc.app.DB2ResultSetTrace -> getInt2( 1 ) (2001-3-1 15:20:51.705)
| | | | | Statement handle = 3:1
| | | | | Return value = 8
| | | | jdbc.app.DB2ResultSetTrace <- getInt2 - Time Elapsed = 0.0
| | | jdbc.app.DB2ResultSetTrace <- getInt - Time Elapsed = 0.0030
| | | jdbc.app.DB2ResultSetTrace -> wasNull (2001-3-1 15:20:51.708)
| | | | Statement handle = 3:1
| | | jdbc.app.DB2ResultSetTrace <- wasNull - Time Elapsed = 0.0
| | jdbc.app.DB2ResultSetTrace <- getObject - Time Elapsed = 0.0060
| jdbc.app.DB2ResultSetTrace <- getObject - Time Elapsed = 0.0080
jdbc.app.DB2ResultSetTrace <- getObject - Time Elapsed = 0.012

jdbc.app.DB2ResultSetTrace -> close (2001-3-1 15:20:51.711)
| Statement handle = 3:1
| jdbc.app.DB2ResultSetTrace -> close2( true ) (2001-3-1 15:20:51.712)
| | Statement handle = 3:1
| | jdbc.app.DB2ResultSetTrace -> clearIsList (2001-3-1 15:20:51.714)
| | | Statement handle = 3:1
| | jdbc.app.DB2ResultSetTrace <- clearIsList - Time Elapsed = 0.0
| jdbc.app.DB2ResultSetTrace <- close2 - Time Elapsed = 0.0020
jdbc.app.DB2ResultSetTrace <- close - Time Elapsed = 0.0040

jdbc.app.DB2PreparedStatementTrace -> close() (2001-3-1 15:20:51.717)
| Statement handle = 3:1
| jdbc.app.DB2ResultSetTrace -> clearIsList (2001-3-1 15:20:51.718)
| | Statement handle = 3:1
| jdbc.app.DB2ResultSetTrace <- clearIsList - Time Elapsed = 0.0
jdbc.app.DB2PreparedStatementTrace <- close - Time Elapsed = 0.0020

DB2Driver - connect(jdbc:db2:pace2)

jdbc.app.DB2ConnectionTrace -> connect( pace2, info, db2driver, 0, false )
(2001-3-1 15:20:51.758)
| 10: connectionHandle = 11
| jdbc.DB2Exception -> DB2Exception() (2001-3-1 15:20:52.342)
| | 10: SQLError = [IBM][CLI Driver] SQL1032N  No start database manager command was issued. 
SQLSTATE=57019

| |     SQLState = 08001
| |     SQLNativeCode = -1032
| jdbc.DB2Exception <- DB2Exception() [Time Elapsed = 0.0020]
| jdbc.app.DB2ConnectionTrace -> close2() (2001-3-1 15:20:52.345)
| | 10: connectionHandle = 11
| | jdbc.DB2Exception -> DB2Exception() (2001-3-1 15:20:52.348)
| | | 10: SQLError = [IBM][CLI Driver] CLI0106E  Connection is closed. SQLSTATE=08003
| | |     SQLState = 08003
| | |     SQLNativeCode = -99999
| | jdbc.DB2Exception <- DB2Exception() [Time Elapsed = 0.0020]

DB2トレース収集

DB2トレースは、問題の究明のためにDB2サポート・サービスによってよく用いられる、もう1のタイプのトレースです。多くの場合、これら情報は、DB2サポート・サービス担当者にとって有用なものです。ここでは、このトレースによって情報を収集する方法を説明します。このトレース方法はDB2サーバーのパフォーマンスに大きく影響し、また、その分析もほとんどの場合、DB2サポート・サービスによってのみ可能であるため、DB2サポート・サービスによる指示があった場合にのみ、この方法を用いるべきです。

DB2トレース収集をするには、まず、他のすベてのアプリケーションを終了し、次のコマンドによってトレースを有効にします。

db2trc on -l 4000000 -e -l -f db2trc.dmp

トレースを有効にした後、問題の発生したプロセスを再現すると、ダンプ・ファイルdb2trc.dmp が作成されます。次に、このファイルを、DB2サポート・サービスに提示するためのフォーマットに変換します。このフォーマット変換には、次のコマンドを使用します。

db2trc flw db2trc.dmp > db2trc.flw
db2trc fmt db2trc.dmp > db2trc.fmt

次に、以下のコマンドによってトレースを無効にします。

db2trc off

DB2トレースのサンプル
以下は、作成したdb2trc.fmtのごく一部です。

1 DB2 cei_entry     oper_system_services sqlogmblk (1.20.15.60)
 pid 7066; tid 1; node 0; cpid 18395; sec 0; nsec 0; tpoint 0
2 DB2 cei_data      oper_system_services sqlogmblk (1.25.15.60)
 pid 7066; tid 1; node 0; cpid 18395; sec 0; nsec 0; tpoint 1
 018c 4d38 0000 0064 0000 0000           ..M8...d....
3 DB2 cei_data      oper_system_services sqlogmblk (1.25.15.60)
 pid 7066; tid 1; node 0; cpid 18395; sec 0; nsec 0; tpoint 250
 01be 0508                               ....
4 DB2 cei_retcode   oper_system_services sqlogmblk (1.21.15.60)
 pid 7066; tid 1; node 0; cpid 18395; sec 0; nsec 0; tpoint 254
 rc = 0
5 DB2 fnc_retcode   SW- query graph      sqlnq_keych__new (1.31.60.384)
 pid 7066; tid 1; node 0; cpid 18395; sec 0; nsec 0; tpoint 254
 rc = 0
6 DB2 fnc_retcode   SW- query graph      sqlnq_qtb::cr8_key_col_struct (1.31.60.353)
 pid 7066; tid 1; node 0; cpid 18395; sec 0; nsec 0; tpoint 254
 rc = 0
7 DB2 fnc_entry     SW- query graph      sqlnq_pid::prd_eligibility (1.30.60.382)
 pid 7066; tid 1; node 0; cpid 18395; sec 0; nsec 0; tpoint 0
8 DB2 fnc_retcode   SW- query graph      sqlnq_pid::prd_eligibility (1.31.60.382)
 pid 7066; tid 1; node 0; cpid 18395; sec 0; nsec 0; tpoint 254
 rc = 0
9 DB2 fnc_entry     SW- query rewrite    sqlnr_pid_bexp (1.30.64.34)
 pid 7066; tid 1; node 0; cpid 18395; sec 0; nsec 0; tpoint 0
10 DB2 fnc_retcode   SW- query rewrite    sqlnr_pid_bexp (1.31.64.34)
 pid 7066; tid 1; node 0; cpid 18395; sec 0; nsec 0; tpoint 254
 rc = 0
11 DB2 fnc_entry     SW- query graph      sqlnq_pid::prd_eligibility (1.30.60.382)
 pid 7066; tid 1; node 0; cpid 18395; sec 0; nsec 0; tpoint 0

Below is a sample of the corresponding db2trc.fmt file: 

pid = 7066; tid = 1; node = 0;
1 sqlogmblk  cei_entry
2 sqlogmblk  cei_data     ...
3 sqlogmblk  cei_data     ...
4 sqlogmblk  cei_retcode  0
5 sqlnq_keych__new fnc_retcode  0
6 sqlnq_qtb::cr8_key_col_struct fnc_retcode  0
7 sqlnq_pid::prd_eligibility fnc_entry
8 sqlnq_pid::prd_eligibility fnc_retcode  0
9 sqlnr_pid_bexp fnc_entry
10 sqlnr_pid_bexp fnc_retcode  0
11 sqlnq_pid::prd_eligibility fnc_entry

まとめ

結論は、DB2クライアント/サーバーの問題のトラブルシューティングのための診断情報には、発生したエラーの特性に応じていくつかの種類があるということです。問題の種類によっては、DB2サポート・サービスへの連絡が必要な場合もありますが、この文書では、「トラブルシューティングに利用可能なツール」「ツールの用途」「問題の診断に必要なファイルの作成方法」について基本的な事柄を示しました。このようなツール、また、DB2に使用できるその他のトラブルシューティング・ツールに関する詳しい情報は、「DB2 UDB 問題判別の手引き」を参照してください。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Information Management
ArticleID=323189
ArticleTitle=DB2トレース収集
publish-date=03092002