WebSphere Application Server 診断ツールは、データベース接続に関する問題のトラブルシューティングに役立つサービスを提供しています。
さらに、IBM Web サイトには、データベース固有の接続の問題に対する文書化された解決策を見つけるための柔軟な検索機能が用意されています。
以下の手順は、接続に関する問題を迅速に切り分けるのに役立ちます。
- このアプリケーション・サーバーのログ・ファイルをブラウズして、手掛かりを探します。
エラー・ログのセットアップ
を参照してください。
JVM ログの表示
を参照してください。デフォルトでは、これらのファイルは app_server_root/server_name/SystemErr.log および SystemOut.log です。
- データ・ソースの helper クラスのプロパティーをブラウズして、
そのプロパティーに誤りがなく、それが WebSphere Application Server のクラスパス上にあることを確認します。
不可解なエラーまたは振る舞いが発生する場合は、helper クラス名の欠落や命名の誤りが原因である可能性があります。
WebSphere Application Server は、指定されたクラスをロードできない場合にはデフォルトの helper クラスを使用しますが、これはデータベース・マネージャーで正しく機能しない場合があります。
- データ・ソースの Java Naming and Directory Interface (JNDI) 名が、
そのデータ・ソースへのアクセスを試みているクライアントが使用する名前と一致することを検査します。
エラー・メッセージに、問題がネーミングに関連している可能性があると示される場合、
つまり、メッセージ内で name server または naming service について言及されるか、
あるいは NMSV で始まるエラー ID が含まれている場合は、
『ネーミング関連の問題』および『ネーミング・サービス・コンポーネントのトラブルシューティング』のトピックを参照してください。
- トレース仕様 RRA=all=enabled を使用して、
リソース・アダプター用のトレースを使用可能にします。
指示に従ってトレース出力をダンプしてブラウズし、問題の原因をしぼりこみます。
データベース固有のトラブルシューティングに関するヒントの包括的なリストについては、WebSphere Application Server 製品サポート・ページを参照してください。(この項目の終わりにあるリンクをご覧ください。) 「Search Support」フィールドに、検索語の 1 つとしてデータベース・ベンダー名を入力します。
「Solve a problem」を選択して、次に「検索」をクリックします。
このインフォメーション・センターの IBM からのトラブルシューティングのヘルプ
の項目で常にサポート内容を参照することができます。
現在、このインフォメーション・センターでは、以下のデータベースに関するトラブルシューティングのヒントの提供は限定されています。
IllegalConnectionUseException
このエラーは
、WAS40DataSource から取得した接続が複数のスレッド上で使用されている場合に生じることがあります。
このような使用法は、J2EE 1.3 プログラミング・モデルに違反しているため、
サーバー上で検出されると例外が生成されます。この問題は、
サーブレットまたは Bean 管理パーシスタンス (BMP) タイプの Enterprise Beans を通じてデータ・ソースにアクセスするユーザーに関して生じます。
この問題を確認するには、接続共用のコードを調べます。
コードは、プログラミング・モデルの推奨に従わないことで、意図せずに共用を発生させる可能性があります。
例えば、サーブレットのインスタンス変数内に接続を保管することによって、
複数のスレッド上で同時に接続が使用される可能性があります。
データ・ソースまたはリソース・アダプターへのアクセス中の ConnectionWaitTimeoutException
アプリケーションが、WebSphere Application Server データ・ソースまたは JCA 準拠のリソース・アダプターにアクセスしようとしているときに、
それぞれ com.ibm.websphere.ce.cm.ConnectionWaitTimeoutException、
または com.ibm.websphere.ce.j2c.ConnectionWaitTimeoutException のような例外を受け取る場合、
考えられる原因は以下のとおりです。
- 特定のプールの接続の最大数が非常に低く設定されている。接続のコンカレント使用要求が、
接続プール用に構成された最大値を超えています。
CPU 使用率が高くないにもかかわらずこれらの例外を定期的に受け取る場合は、これが問題の原因です。
この例外は、使用中のサーバーに、スレッドを保持するために使用できる接続がほとんどないことを示しています。
- 接続待ち時間が非常に低く設定されている。現行の接続要求が高すぎて、短時間有効な接続が存在しない状態になることがあります。接続待ちタイムアウト値が非常に低い場合、
ユーザーが接続をプールに戻す直前にタイムアウトになることがあります。
これは、接続待ち時間を調整することである程度緩和できます。
延長期間中に最大に近い接続を使用しており、定期的にこのエラーを受け取る場合は、これが問題の原因です。
- いくつかの接続をクローズしていない、または接続をプールに戻す速度が非常に遅い。
この状況が発生するのは、共用不能な接続を使用している、接続をクローズし忘れた、
または接続を使用し終えて長時間経過した後にクローズしたなどというときに、
接続が再使用のためにプールに戻されなかった場合です。
プールは空になり、すべてのアプリケーションが ConnectionWaitTimeoutExceptions を入手します。
この問題が発生すると、接続プール内の接続が使い尽くされ、
ほとんどの要求に対してエラーを受け取ることになります。
- サーバーまたはバックエンド・システムが処理するリソースを保持するよりも、多くのロードを駆動している。この場合、より必要なリソースを判別し、ニーズに対応するために構成またはハードウェアをアップグレードする必要があります。
アプリケーションやデータベース・サーバーの CPU がほぼ 100% 使用中である場合には、これが問題の原因です。
これらの問題を解決するには、以下のいずれかを行います。
- 使用する接続数を少なくするようにアプリケーションを変更します。
- 接続を適宜クローズします。
- MaxConnections または ConnnectionWaitTimeout のプール設定を変更します。
- リソースとその構成を調整します。
com.ibm.websphere.ce.cm.StaleConnectionException: [IBM][CLI Driver] SQL1013N The database alias name or database name "NULL" could not be found. SQLSTATE=42705
このエラーは、データ・ソースが定義されているにもかかわらず、databaseName 属性とそれに対応する値が「カスタム・プロパティー」パネルに追加されていない場合に生じます。
databaseName プロパティーを追加するには、以下のようにします。
- 管理コンソールで「リソース」>「JDBC プロバイダーの管理」の順にリンクをクリックする。
- 問題のあるデータ・ソースをサポートする JDBC プロバイダーを選択する。
- 「データ・ソース」を選択してから、問題のあるデータ・ソースを選択する。
- 「追加プロパティー」の下の「カスタム・プロパティー」をクリックする。
- 「databaseName」プロパティーを選択 (存在しない場合には追加) して、実際のデータベース名を値として入力する。
- 「適用」または「OK」をクリックし、アクション・バーの「保管」をクリックする。
- 再びデータ・ソースにアクセスする。
java.sql.SQLException: java.lang.UnsatisfiedLinkError:
このエラーは、データベースをサポートするバイナリー・ライブラリーを含むディレクトリーが
、WebSphere Application Server が開始された環境の LIBPATH 環境変数に含まれていないことを示します。
DBM ベンダーのライブラリーを含むパスは、dbm によって変わります。それらを検索する方法の 1 つは、
エラー・メッセージに指定された欠落ライブラリーをスキャンすることです。次に、LIBPATH 変数を
、WebSphere Application Server が実行されたアカウントの .profile の中で、あるいは .sh ファイルにステートメントを追加して startServer プログラムを実行することによって、
欠落ディレクトリーを含むように訂正することができます。
トランザクションを実行しようとしているときに、「
J2CA0030E: Method enlist caught java.lang.IllegalStateException」が、「
WTRN0063E: 既存の 2 フェーズ可能リソースがあり、1 フェーズ可能リソースを取得しようとする不正な試みが行われました。」というエラーにラップされた。
このエラーは、Last Participant Support が欠落しているか使用不可の場合に生じることがあります。
Last Participant Support を使用すると、1 フェーズ対応リソースと 2
フェーズ対応リソースを、同じトランザクション内で取得できます。
Last Participant Support は、以下が true の場合のみ使用できます。
- WebSphere Application Server Programming Model Extensions (PME) がインストールされている。
PME は、Application Server Integration Server 製品に含まれています。
- PME のインストール時に、追加の Integration Server 拡張機能オプションが使用可能になっている。
この機能は、標準インストールを実行すると、デフォルトで使用可能になります。
カスタム・インストールを実行する場合は、この機能を使用不可にするオプションがあり、
これによって Last Participant Support は使用不可になります。
- 1 フェーズ・リソースをリストしているアプリケーションが、
「Accept heuristic hazard」オプションを使用可能にしてデプロイされている。
このデプロイメントは、アセンブリー・ツールを使用して実行されます。
データベースを操作しようとしているとき
に、java.lang.UnsatisfiedLinkError:xaConnect 例外が発生しました。
この問題には、主要な原因として次の 2 つが考えられます。
- 最も一般的な原因は、データベースへの接続をサポートする JDBC Driver が欠落しているか、
正しいバージョンではないか、あるいは、
ドライバーをサポートするネイティブ・ライブラリーがシステムのパス上に存在しているということです。
- Windows プラットフォーム上でこの問題を解決するには、JDBC Driver の JAR ファイルが必ずシステム PATH 環境変数上に存在するようにします。
- DB2 を使用している場合は、
少なくとも DB2 クライアント製品を WebSphere ホスト上にインストールしておきます。
- AIX または Linux オペレーティング・システム・プラットフォームの場合は、
ご使用のデータベース製品のデータベース・クライアントのサポートに必要なすべてのネイティブ・ライブラリーが
、WebSphere Application Server を実行するアカウントのプロファイルにある LD_LIBRARY_PATH 環境変数で指定されるようにします。
DB2 を使用している場合、ネイティブ・ライブラリーは libdb2jdbc.so です。
このライブラリーが WebSphere によって正しくアクセスされるようにする最善の方法は
、WebSphere を実行しているアカウント (「root」など) の .profile スクリプトから
、DB2 に付属している db2profile スクリプトを呼び出すことです。
- DB2 バージョン 7.2 以前のバージョンを使用している場合は
、DB2 に付属している usejdbc2,script が
、WebSphere Application Server を起動したアカウントのプロファイルから呼び出されるようにします。
- DB2 バージョン 8.1 以降のバージョンを使用している場合は、
前述の Windows オペレーティング・システムの説明を参照してください。
- データベース・マネージャーが DB2 である場合、64 ビット・インスタンスを
作成するオプションを選択した可能性があります。
64 ビット構成はサポートされないことがあります。
これが起きている場合には、そのデータベース・インスタンスを除去し、
デフォルトの 32 ビット設定で新規インスタンスを作成します。
CLI ドライバーまたは Universal
JDBC T2 ドライバーを使用している場合、WebSphere Application Server は DB2 UDB 64 ビット・サーバーとの対話をサポートしますが、DB2 UDB 32 ビット・クライアントを通じて行う必要があります。
WebSphere Application Server 環境 (CLASSPATH など) は、正常に機能するために 32 ビット・クライアント・コードを使用する必要があります。
Universal JDBC T4 ドライバーでは、32 ビット DB2 クライアントを使用する必要はありません。
WebSphere Application Server 環境で、db2jcc.jar およびそのライセンス・ファイルを含むように CLASSPATH を構成するだけです。
注: WebSphere Application Server において JDBC Driver およびデータ・ソースを構成する際の一般ヘルプについては、
トピック『
アプリケーションからのデータへのアクセス』を参照してください。
データベース操作を行おうとすると
、"J2CA0114W: No container-managed authentication alias found for connection factory or datasource datasource" というメッセージが表示される
このエラーは、JACL スクリプトを使用してデータ・ソースを作成した後で、アプリケーションを実行してその
データ・ソースにアクセスする場合に、SystemOut.log ファイルで発生することがあります。
このようなエラー・メッセージが出るのは、JACL スクリプトによって
、CMP 接続ファクトリーでコンテナー管理認証別名が設定されなかったためです。
そのため、この JACL には次の行が欠落しています。
$AdminConfig create MappingModule $cmpConnectorFactory "{mappingConfigAlias
DefaultPrincipalMapping} {authDataAlias $authDataAlias}
この問題を解決するためには、欠落した行を JACL スクリプトに追加して、
もう一度スクリプトを実行します。JACL スクリプトのサンプルについては
、例: Java Management Extensions API およびスクリプト・ツールを使用した JDBC プロバイダーおよびデータ・ソースの作成
を参照してください。
ws_ant コマンドを使用して、
HP プラットフォーム上で Structured Query Language in Java 用にデータベース・カスタマイズを実行すると、エラーがスローされる
ws_ant コマンドを使用して、
HP プラットフォーム上で Structured Query Language in Java (SQLJ) 用にデータベース・カスタマイズを実行すると、次のようなエラーが表示されることがあります。
[java] [ibm][db2][jcc][sqlj]
[java] [ibm][db2][jcc][sqlj] Begin Customization
[java] [ibm][db2][jcc][sqlj] encoding not supported!!
このエラーは、
HP のデフォルト文字セットを使用してデータベースを作成したことが原因で発生した可能性があります。
Java Common Client (JCC) ドライバーは、Software Development Kit (
SDK) を使用して、コード・ページの変換を実行します。
しかし本製品に付属の SDK は HP のデフォルトのコード・ページに対応していません。
データベースを作成する前に、
LANG を ISO ロケールに設定します。次のように指定します。
export LANG=en_US.iso88591
情報管理ソフトウェアの IBM サポート・サイトを参照して、DB2 の最新技術情報にアクセスしてください。
コンテナー管理パーシスタンス (CMP) で、定義されたとおりにデータベース・アクセス機能を正常に取得できない。
WebSphere Application Server が、接続ファクトリー上のデータベースでアクセスされる特定の生成済みコードをキャッシングしていて、Java アーカイブ (JAR) ファイルにおける変更によりデータベース・アクセスの再生成が必要になった場合、これらの変更はサーバーを停止して再始動するまで有効になりません。
これらの障害が発生する可能性のある例を以下に挙げます。
- エンタープライズ Bean カスタム finder メソッドを追加した場合。NullPointerException 例外が作成されます。
- エンタープライズ Bean カスタム finder メソッドを更新した場合。新しい SQL ステートメントが実行されません。
- スキーマ・マッピングを変更した場合。新しい SQL ステートメントが実行されません。
要約すると、カスタム finder メソッドを含むエンタープライズ Bean を追加または更新した場合は、サーバーを停止して再始動する必要があります。