現象
Java アプリケーションで XA トランザクションを使用していて、SQL Server のインスタンスにインストールされている SQL Server (sqljdbc_xa) の Microsoft JDBC ドライバーのバージョンが4.2.6420.100 または 6.0.7507.10の場合は、sql server のプロセスがクラッシュするまで、イベントハンドルカウントは増え続けます。 SQL Server プロセスのイベントハンドルカウントを確認するには、タスクマネージャーを起動し、[ 詳細 ] タブをクリックします。 SQL Server カーネルリソースが使い果たされた場合、次のエントリがアプリケーションイベントログに記録されることがあります。
Log Name: Application
Source: Microsoft-Windows-Complus
Date: date time
Event ID: 4689
Task Category: (8)
Level: Error
Keywords: Classic
User: N/A
Computer: computer_name
Description:
The run-time environment has detected an inconsistency in its internal state. This indicates a potential instability in the process that could be caused by the custom components running in the COM+ application, the components they make use of, or other factors. Error in COM\complus\src\inc\UTSem.H(100), Insufficient system resources exist to complete the requested service.
: CreateEvent returned a NULL handle
原因
この問題は、クラスによって DTC ITransaction インスタンスが作成され、停止時にインスタンスが解放されない場合に発生します。 クラスが何度も呼び出されると、SQL Server のインスタンスでハンドルリークの問題が発生します。
解決方法
この問題を解決するには、既存の sqljdbc_xa .dll ドライバーを置き換えます。
JDBC ドライバー4.2
これを行うには、Microsoft ダウンロードセンターから、更新された MICROSOFT JDBC Driver 4.2 FOR SQL Server (sqljdbc_xa) パッケージをダウンロードしてインストールします。 注意事項
-
更新されたパッケージのバージョン番号は 4.2.8112.100です。
-
更新された sqljdbc_xa .dll ドライバーを使うことができるように、既存のクライアント側のライブラリファイル (sqljdbc41 または sqljdbc42) を置き換える必要はありません。
JDBC ドライバー6.0
これを行うには、Microsoft ダウンロードセンターから、 更新された MICROSOFT JDBC Driver 6.0 FOR SQL Server (sqljdbc_xa) パッケージをダウンロードしてインストールします。
注意事項
-
更新されたパッケージのバージョン番号は 6.0.8112.100です。
-
更新された sqljdbc_xa .dll ドライバーを使うことができるように、既存のクライアント側のライブラリファイル (sqljdbc41 または sqljdbc42) を置き換える必要はありません。
詳細情報
この問題は、SQL Server バージョン4.2.6420.100 の JDBC ドライバーで導入されました。また、バージョン6.0.7507.10 にも存在します。 この問題は、SQL Server バージョン6.0.7728.100 と 6.0.8112.100用の JDBC ドライバーで修正されています。 この修正プログラムは、インスタンスが停止したときに DTC ITransaction インスタンスを解放します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
関連情報
ソフトウェアの更新を説明するために Microsoft が使用する 用語 について説明します。
適用対象
この資料は、以下を対象としています。
-
Microsoft JDBC Driver 4.2 および SQL Server 用の6.0 は、次のように使用されます。
-
Microsoft SQL Server 2016
-
Microsoft SQL Server 2014
-
Microsoft SQL Server 2012
-
Microsoft SQL Server 2008 R2
-
Microsoft SQL Server 2008
-
Microsoft SQL Server 2005
-