この項目では、DB2 データベースにアクセスする際のトラブルシューティングのヒントを提供しています。
db2ubind.lst ファイルおよび db2cli.lst ファイルは 、DB2 インストール・ルートの bnd ディレクトリーにあります。 このディレクトリーからコマンドを実行します。
この問題を解決するには、bnd ディレクトリーに ある db2cli.lst スクリプトを実行して、DB2 パッケージを再バインドします。 例えば、db2>@db2cli.lst のようにします。
この問題を解決するには、クライアントおよびサーバーが同じセキュリティー・メカニズムを使用しているかどうかを確認します。 例えば、これがユーザーのデータ・ソース上のエラーである場合、ユーザー ID とパスワードまたは認証エイリアスの割り当てを行ったかどうかを確認します。
2002-07-26-14.19.32.762905 Instance:db2inst1 Node:000 PID:9086(java) Appid:*LOCAL.db2inst1.020726191932 XA DTP Support sqlxa_open Probe:101 DIA4701E Database "POLICY2" could not be opened for distributed transaction processing. String Title: XA Interface SQLCA PID:9086 Node:000 SQLCODE = -1403
db2connect to dbname c:¥SQLLIB¥bnd>DB2 bind @db2ubind.lst blocking all grant public c:¥SQLLIB¥bnd>DB2 bind @db2cli.lst blocking all grant public
Red Hat Linux 上で DB2 の実行中にこのエラーが生じた場合は 、max queues system wide パラメーターが低すぎるために 、DB2 がトランザクションの完了に必要なリソースを獲得できないことを示します。 この問題が生じると、例外 J2CA0046E および DSRA0010E に続いて、 例外 DSRA8100E が出されることがあります。
この問題を解決するには 、/proc/sys/kernal/msgmni ファイルを編集して 、max queues system wide パラメーターの値が 128 より大きい値にしてください。
ERROR CODE: -911 COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/NT] SQL0911N The current transaction has been rolled back because of a deadlock or timeout. Reason code "2". SQLSTATE=40001
例えば、トランザクション A が column1=10 の行を削除し、 トランザクション B が column1>8 かつ column1<12 にスキャンを行うというシナリオがあるとします。 DB2_RR_TO_RS をオフにした場合、トランザクション B はトランザクション A がコミットまたはロールバックするまで待機します。 トランザクション A がロールバックすると、column1=10 の行は、トランザクション B の照会の結果セットに組み込まれます。 DB2_RR_TO_RS をオンにした場合、 トランザクション B はトランザクション A がコミットまたはロールバックするまで待機しません。 トランザクション B は、削除された行を含まない照会結果を即時に受け取ります。 DB2_RR_TO_RS を設定すると、ロック動作が効果的に変更され、 デッドロックが回避されます。
このエラーは、メッセージ「DSRA8040I: DataSource への接続に失敗しました。」で表示されます。
このエラーは、通常、DB2 JDBC Driver のクラスパスは 正しく ${DB2_JDBC_DRIVER_PATH}/db2java.zip に設定されているが、 環境変数 DB2_JDBC_DRIVER_PATH が設定されていない場合に生じます。
このエラーは、DB2 バージョン 7.1 または 7.2 を使用している場 合、および usejdbc2 をまだ稼働していない場合に起こる場合があります。お客様のパスは正しいにもかかわらず、このエラーが表示される場合は、問題が考えられます。
この問題を解決するには、 変数 DB2_JDBC_DRIVER_PATH の値を db2java.zip ファイルを含んでいるディレクトリー・パスに設定して、追加します。
このエラーは通常、フィールドの 1 つにある 255 文字を超えるエンティティーについてパブリッシュまたは照会が行われようとしたときに起こります。 英語以外の文字が使用されている場合はあまりはっきりしません。255 文字が表示される前に本当の限界に達するからです。
この問題を修正するには、DB2 Version 7 on z/OS を使う際の制限として受け入れます。255 文字の制限を越えないでください。
症状 | ロック競合例外が、ご使用のアプリケーションがインプリメンテ ーション・タイプ XA のデータ・ソース経由でアクセスする DB2 データベースに発生します。 |
問題 | ご使用のアプリケーションは、終了 (e) 状態にある XA トラン ザクションによりロックされているデータベース・レコードにアクセスしよ うとしていますが、トランザクション・マネージャーで準備済みにはできま せん。 |
説明 | 終了するが、準備できない DB2 への XA トランザクション
は、終了 (e) 状態になります。未確定 なものは考慮されない ため、トランザクション・マネージャーは、このトランザクションをリカバリーすることはできません。DB2 はそのトランザクションを、未確定トランザクションのリストに戻しません。 DB2 はまた、トランザクションを即時にロールバックせず、データベースへのすべての接続が解除されるまで待機します。 この待機の間、トランザクションはデータベースのロック状態を保持し続けます。アプリケーション・サーバーがロールバックを 許可するデータベースからのすべての接続を切断するわけではない場合は、終了したトランザクションは、 同じデータベース・レコードをロックしたままの状態を維持します。 ご使用のアプリケーションが、これらのロックされたレコードにアクセス しようとすると、DB2 でロック競合例外が発生します。 |
推奨される対応 | DB2 バージョン 8.2 は、定義済み DB2 サーバーに接続するサン プル・アプリケーションと共に配送され、これらの終了した特定のトランザクションのリストを取得するために使用可能な DB2 API を使用します。アプリケーションは、アプリケーションがこれらのトランザクションをロールバックバックした後で、総時間の指定を可能にする構成設定を提供します。 DB2 バージョン 8.2 の sqllib/samples/db2xamon.c デ ィレクトリーにあるサンプル・アプリケーションを見付けて、実行しま す。 |
このエラーは通常、 WebSphere Application Server バージョン 6.0 以降を旧バージョンと併用して使用し、DB2 Universal Datasource を旧バージョンで作成しようとした場合に発生します。
これは、DB2 Universal Datasource が、バージョン 5 およびそれ以前のバージョンで使用できないにもかかわらず、バージョン 6 の管理コンソールが作成を許可することが原因で発生する場合があります。
この問題を修正するには、バージョン 6.0 以降でデータ・ソースを作成します。
症状 | バックエンドとして DB2 を使用している Windows インストール上の WebSphere Application Server の場合、JVM ログ内に以下の例外が示されます。
java.sql.SQLException: [IBM][CLI Driver] SQL0567N "SYSTEM" is not a valid authorization ID. SQLSTATE=42602 DSRA0010E: SQL State = 42602, Error Code = -567 at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException (Unknown Source) at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.check_return_code (Unknown Source) at COM.ibm.db2.jdbc.app.DB2Connection.connect(Unknown Source) at COM.ibm.db2.jdbc.app.DB2Connection.<init>(Unknown Source) at COM.ibm.db2.jdbc.app.DB2ReusableConnection.<init>(Unknown Source) at COM.ibm.db2.jdbc.DB2PooledConnection.getConnection(Unknown Source) at com.ibm.ws.rsadapter.spi.WSRdbDataSource.getConnection(WSRdbDataSource.java:1035) at com.ibm.ws.rsadapter.spi.WSManagedConnectionFactoryImpl.createManagedConnection(WSManagedConnectionFactoryImpl.java:937) at com.ibm.ejs.j2c.poolmanager.FreePool.createManagedConnectionWithMCWrapper(FreePool.java:1502) |
問題 | この例外は、WebSphere Application Server が DB2 サーバーのクライアントである構成の場合に発生します。 基本的な問題は、Windows 上の WebSphere Application Server と DB2 の間の権限の競合です。これは、アプリケーションがユーザー ID およびパスワードを提供することなしに DB2 に接続しようとして起こります。 |
説明 | DB2 クライアントと DB2 データベースが同じマシン上で実行されているときは、DB2 はクライアントがユーザー ID およびパスワードなしで接続することを許可します。 接続はクライアント・プロセスを所有するユーザーのクレデンシャルの下で行われます。この場合はアプリケーション・サーバー JVM です。 ただし、WebSphere Application Server が Windows サービスとして実行されていて、「Log on as」オプションが「Local System Account」に設定されている場合は、アプリケーション・サーバー JVM は SYSTEM と呼ばれる特定の Windows ユーザーのサブコンポーネントとしてカテゴリー化されています。 このユーザーは DB2 に接続することを許可されていないので、先に示した例外という結果になります。 |
推奨される対応 | 以下の 2 つのオプションがあります。
|
症状
J2CA0027E: トランザクション ID {XidImpl 内で、 dataSource jdbc/SDOSVT から XA リソース・アダプターで prepare を 呼び出しているときに、例外が発生しました。: formatId(57415344), gtrid_length(36), bqual_length(54), data(000000ff5191398200000001000000296cac5c42fe3c6838631cbaafc8b5a9253b846544 000000ff5191398200000001000000296cac5c42fe3c6838631cbaafc8b5a9253b8465440000000 10000000000000000000000000002)}: javax.transaction.xa.XAException: XAER_NOTA at com.ibm.db2.jcc.a.xb.a(xb.java:1682) at com.ibm.db2.jcc.a.xb.a(xb.java:841) at com.ibm.db2.jcc.a.xb.prepare(xb.java:812) at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.prepare (WSRdbXaResourceImpl.java:837) ...
問題
DB2 Universal JDBC driver タイプ 4 XA 接続が、 AutoCommit が false に設定されたローカル・トランザクションなどの単一フェーズ・トランザクションで使用されており、その単一フェーズ・トランザクションがロールバックされた場合、prepare 呼び出し上での、2 フェーズ・トランザクションにおける次の接続の使用は失敗します。
DB2 Universal JDBC driver タイプ 4 XA サポートの問題により、 XA の prepare 呼び出しが失敗します。 この問題は、単一フェーズ・トランザクションがコミット済みの場合、および DB2 Universal JDBC Driver をタイプ 2 モードで使用している場合は発生しません。
解決策
DB2 バージョン 8.2 修正パッケージ 1 にアップグレードします。これは、バージョン 8.1 修正パッケージ 8 と同じです。これらのリリースで使用可能な Universal JDBC Driver XA により、前述のタイプ 4 モードでの問題が解決されます。
症状
java.rmi.MarshalException: CORBA MARSHAL 0x4942f89a No; nested exception is: org.omg.CORBA.MARSHAL: Unable to read value from underlying bridge : Mismatched serialization UIDs : Source (Rep. IDRMI:com.ibm.db2.jcc.c.SqlException:63EEE52211DCD763:82CE0C0DA2B0A000) = 82CE0C0DA2B0A000 whereas Target (Rep. IDRMI:com.ibm.db2.jcc.c.SqlException:63EEE52211DCD763:91C6171BC645E41B) = 91C6171BC645E41B vmcid: 0x4942f000 minor code: 2202 completed: No
問題
アプリケーション・クライアント・マシンおよびご使用のアプリケーション・サーバー上の db2jcc.jar ファイルが、相互に互換性のないバージョンの DB2 のものか、データ・ストアとして機能するバージョンの DB2 と互換性がありません。
解決策
アプリケーション・クライアント・マシン、ご使用のアプリケーション・サーバー、およびご使用の DB2 サーバー上の db2jcc.jar ファイルを確認します。 クライアント・マシンおよびアプリケーション・サーバー上では、 DB2 サーバーと互換性のある同じバージョンのファイルをインストールします。
症状
DB2 Universal driver タイプ 4 を使用して DB2 または Cloudscape Network Server へのアクセスを試み、データベースが障害を起こした場合、データベース・サーバーがすべての JDBC getConnection 要求に対して 汎用 -99999 例外を出します。 以下のコードの抜粋で例が示されているこの例外は、アプリケーションで予期しない振る舞いを引き起こす可能性があります。
java.sql.SQLException: IO Exception opening socket to server bs8.rchland.ibm.com on port 1527. The DB2 Server may be down.DSRA0010E: SQL State = null, Error Code = -99,999DSRA0010E: SQL State = null, Error Code = -99,999 at com.ibm.db2.jcc.b.a.<init>(a.java:125) at com.ibm.db2.jcc.b.b.a(b.java:1011) at com.ibm.db2.jcc.c.l.<init>(l.java:197) at com.ibm.db2.jcc.b.b.<init>(b.java:258) at com.ibm.db2.jcc.DB2PooledConnection. <init>(DB2PooledConnection.java:44) at com.ibm.db2.jcc.DB2ConnectionPoolDataSource.getPooledConnectionX (DB2ConnectionPoolDataSource.java:80) at com.ibm.db2.jcc.DB2ConnectionPoolDataSource.getPooledConnection (DB2ConnectionPoolDataSource.java:45) at com.ibm.ws.rsadapter.DSConfigurationHelper$1.run (DSConfigurationHelper.java:945)
問題
DB2 Universal Driver の一部のバージョンでタイプ 4 モードで実行中に、データベース障害に対して、WebSphere Application Server が失効した接続例外にマップできる特定のエラー・コードではなく、汎用例外が発生します。 この問題は、DB2 8.1 修正パッケージ 6 または 7、および DB2 8.2 に関連付けられたバージョンのドライバーで発生します。
解決策
DB2 バージョン 8.2 修正パッケージ 1 にアップグレードします。これは、バージョン 8.1 修正パッケージ 8 と同じです。前述のシナリオでの有効なエラー・コードが用意されています。 WebSphere Application Server は、このエラー・コードを予想通りに StaleConnectionException にマップします。
症状
java.security.AccessControlException: Access denied (java.lang.RuntimePermission accessClassInPackage.sun.io)
com.ibm.db2.jcc.b.SqlException: Failure in loading T2 native library db2jcct2
問題
Linux 上の DB2 で Universal JDBC Driver を使用するように構成するプロセスが完了しません。
解決策
症状
[3/8/05 16:27:19:020 CST] 0000003c DataSourceCon E DSRA8040I: DataSource への接続に失敗しました。 "" を検出しました。: java.lang.UnsatisfiedLinkError: COM/ibm/db2/jdbc/app/DB2Connection.SQLConnect (Ljava/lang/String;II)I
問題
ご使用の 64 ビット DB2 バージョン 8.1 修正パッケージ 8 が、ADM64 プラットフォーム上で DB2 レガシー CLI ベースのタイプ 2 ドライバーをサポートしていません。 このバージョンの DB2 には、このドライバーで必要になるライブラリー libdb2jdbc.so がありません。
解決策
DB2 v8.1 を修正パッケージ 9 にアップグレードしてください。
DB2 のテーブルに VARCHAR FOR BIT DATA 列が定義されている、コンテナー管理される永続 (CMP) タイプの Enterprise Bean を、DB2 ユニバーサル JDBC タイプ 4 ドライバーにデプロイしてデータを永続化させると、実行時に、不正な型変換を示す SQLException がスローされます。この例外が発生するのは、DB2 ユニバーサル JDBC タイプ 4 ドライバーを使用し、deferPrepares プロパティーを true に設定している場合だけです。deferPrepares プロパティーを true に設定している場合は、DB2 ユニバーサル JDBC タイプ 4 ドライバーは、標準の JDBC データ・マッピングを使用します。
現在のところ、生成されてデプロイ済みのコードは、標準の JDBC 仕様のマッピングには準拠していません。実行時の失敗は、実行用に Enterprise Bean を準備したツールにおける問題が原因です。