Apache Derby データベースへのデータ・アクセスの問題
トラブルシューティングのヒントを使用して、Apache Derby データベースへのアクセスに役立ててください。
Apache Derby データベースへのアクセス時に、どの問題が発生しましたか?
Apache Derby データベースにアクセス中に、予期しない IOException が SQLException にラップされた
この問題は、Apache Derby データベースが多数のファイルを使用することが原因で生じる可能性があります。Solaris オペレーティング環境などのオペレーティング・システムでは、 アプリケーションが一度に開くことができるファイル数に制限があります。 デフォルトが 64 などの低い数値である場合、この例外を受け取る場合があります。
使用しているオペレーティング・システムでファイル記述子の数を構成できる場合は、 その数を 1024 などのような高い値に設定することによってこの問題を解決できます。
Apache Derby にアクセス中に、「select for update」操作によって表ロックおよびデッドロックが生じる
ある行で select for update 操作を行うことによって表全体がロックしてデッドロック状態が発生すると、 その表の索引が未定義のままになることがあります。 where 文節で使用する列に索引がないと 、Apache Derby で行レベルのロックではなく表ロックが生じる場合があります。
この問題を解決するには、影響を受けた表上で索引を作成します。
「使用中の IBM Universal JDBC ドライバーのバージョンは、Apache Derby データベースへの接続が許可されていません」というエラー
The version of the IBM Universal JDBC driver in use is not
licensed for connectivity to Apache Derby databases. To connect
to this DB2 server, please obtain a licensed copy of the IBM DB2
Universal Driver for JDBC and SQLJ. An appropriate license file
db2jcc_license_*.jar for this target platform must be installed to
the application classpath. Connectivity to Apache Derby databases is
enabled by any of the following license files:
{ db2jcc_license_c.jar, b2jcc_license_cu.jar, db2jcc_license_cisuz.jar }
この問題が発生するのは、誤った JDBC ドライバー Java™ アーカイブ (JAR) ファイル名が JDBC プロバイダーのクラスパスに指定されているためです。
例えば、次の例のように JAR ファイル名に余分な下線 (_) が含まれている場合があります。
${UNIVERSAL_JDBC_DRIVER_PATH}/db2jcc_license__cu.jar
- JACL スクリプト内の UNIVERSAL_JDBC_DRIVER_PATH JAR ファイル名を訂正します。
- クラスターを再始動します。
- クライアントを再実行します。
アプリケーションを実行すると、判読できないメッセージを生成するランタイム例外が発生します。
クライアント・ランタイムに、次のようなメッセージを受け取る場合があります。 Caused by: com.ibm.db2.jcc.a.SqlException: DB2 SQL error: SQLCODE: -1, SQLSTATE: 42X05, SQLERRMC: ANNUITYHOLDER20^T42X05
この問題が発生するのは、WebSphere® Application Server に必要なプロパティー retrieveMessagesfromServerOnGetMessage が設定されていないためです。
- をクリックします。
- 「Apache Derby プロバイダー (Apache Derby provider)」をクリックします。
- スクロールダウンし、「データ・ソース」をクリックします。
- ご使用のデータ・ソースを選択するか、新規データ・ソースを追加します.。
- 「カスタム・プロパティー」を選択します。
- プロパティー retrieveMessagesFromServerOnGetMessage が存在している場合は、 その値を true に設定します。 このプロパティーが存在していない場合は、「新規」を選択し、 値を true に設定したプロパティー retrieveMessagesFromServerOnGetMessage を追加します。
- クライアントを再実行します。