MSDTC を使用した問題のトラブルシューティング

多くの BizTalk Server ランタイム操作では、トランザクション上でランタイム操作の一貫性を維持するために、Microsoft 分散トランザクション コーディネーター (MSDTC) のサポートが必要です。 MSDTC のトランザクション サポートを使用できないと、それに関連付けられた BizTalk Server ランタイム操作を続行できません。 MSDTC トランザクション サポートが正しく構成されていない場合に通常影響を受ける BizTalk のコンポーネントには、シングル サインオン サービス、BizTalk ホスト インスタンス、BizTalk Server によって接続されている SQL Server インスタンスなどがあります (これ以外にもあります)。 このセクションでは、MSDTC に関連するエラーの情報と、MSDTC の問題の診断と解決に使用できる手順について説明します。

MSDTC トランザクション サポートが正しく構成されていない場合に発生する可能性があるエラー

BizTalk 環境のコンピューターで MSDTC トランザクション サポートが正しく構成されていない場合、BizTalk Server で次のようなエラーが発生する可能性があります。

  • "A Microsoft Distributed Transaction Coordinator problem prevented connection to the Configuration database. The transaction manager has disabled its support for remote/network transactions."

  • "A Microsoft Distributed Transaction Coordinator problem prevented connection to the Configuration database. The transaction has already been implicitly or explicitly committed or aborted".

  • "Error Code: 0x8004d00a, New transaction cannot enlist in the specified transaction coordinator".

  • "Could not retrieve transport type data for Receive Location 'MySample ReceiveLocation' from config store. Primary SSO Server 'MyServer' failed. The RPC server is unavailable."

  • "Error Code: 0x8004d025, The partner transaction manager has disabled its support for remote/network transactions".

  • "Error Code: 0xc0002a24, Could not import a DTC transaction. Please check that MSDTC is configured correctly for remote operation."

  • "0x8004d01c

    [0x1705] 内部作業項目の作成時にエラーが発生しました。

    SQL Server が実行されているか確認してください。"

    MSDTC の構成エラーを解決するには、次の手順を実行します。

BizTalk Server とリモート サーバーの間で NetBIOS 名前解決が正常に行われたことを確認する

コンピューター間で MSDTC トランザクションが正常に実行されるには、クライアント コンピューターでサーバー コンピューターの NetBIOS 名を適切な IP アドレスに解決でき、サーバー コンピューターでクライアント コンピューターの NetBIOS 名を適切な IP アドレスに解決できる必要があります。 NetBIOS 名前解決が両方向 (クライアントからサーバー、およびサーバーからクライアント) で機能していることを確認するには、次の手順を実行します。

Note

NetBIOS 名は、一般に ネットワーク 名とも呼ばれます。

  1. 各コンピューターの NetBIOS 名を特定します。

    1. [ マイ コンピューター ] を右クリックして [ システムのプロパティ ] ダイアログを表示し、[ コンピューター名 ] タブをクリックして、コンピューターに割り当てられている 完全なコンピューター名 を表示します。

    2. NetBIOS 名は 、フル コンピューター名 として指定された名前の最初の部分です。たとえば、[ コンピューター名全体 ] が [myserver.company.domain.com] として表示されている場合、コンピューターの NetBIOS 名は myserver になります

  2. 次のようにして、IP アドレスまたは各コンピューターに関連付けられたアドレスを特定します。

    1. クライアント コンピューターでコマンド プロンプトを起動して次のコマンドを入力し、Enter キーを押します。

      ipconfig /all
      
    2. IP アドレスまたはコンピューターに関連付けられたアドレスがコマンド プロンプト ウィンドウに表示されます。

    3. サーバー コンピューターでコマンド プロンプトを起動して次のコマンドを入力し、Enter キーを押します。

      ipconfig /all
      
    4. IP アドレスまたはサーバー コンピューターに関連付けられたアドレスがコマンド プロンプト ウィンドウに表示されます。

  3. 各コンピューターの NetBIOS 名がコンピューターに関連付けられている IP アドレスの 1 つに解決されることを確認します。

    1. クライアント コンピューターでコマンド プロンプトを起動して次のコマンドを入力し、Enter キーを押します。

      ping <NetBIOS name of server computer>
      

      ping コマンドの結果として、サーバー コンピューターに関連付けられた IP アドレスが返されます。

    2. サーバー コンピューターでコマンド プロンプトを起動して次のコマンドを入力し、Enter キーを押します。

      ping <NetBIOS name of client computer>
      

      ping コマンドの結果として、クライアント コンピューターに関連付けられた IP アドレスが返されます。

  4. 各コンピューターの NetBIOS 名に関連付けられている IP アドレスの逆引き名前参照が正しいコンピューター名に解決されることを確認します。

    1. クライアント コンピューターでコマンド プロンプトを起動して次のコマンドを入力し、Enter キーを押します。

      ping -a <IP Address associated with client computer NetBIOS name>
      

      ping コマンドの結果として、NetBIOS 名または手順 3a. で使用した NetBIOS 名に対応する完全修飾ドメイン名が返されます。 返された名前が手順 3a. で使用した NetBIOS 名に一致しないか対応しない場合は、IP アドレスの逆引き参照は失敗し、その結果、MSDTC トランザクションがエラーになります。

    2. サーバー コンピューターでコマンド プロンプトを起動して次のコマンドを入力し、Enter キーを押します。

      ping -a <IP Address associated with server computer NetBIOS name>
      

      ping コマンドの結果として、NetBIOS 名または手順 3b. で使用した NetBIOS 名に対応する完全修飾ドメイン名が返されます。 返された名前が手順 3b. で使用した NetBIOS 名に一致しないか対応しない場合は、IP アドレスの逆引き参照は失敗し、その結果、MSDTC トランザクションがエラーになります。

    NetBIOS 名前解決がいずれかの方向で失敗するか、逆引き名前参照が失敗する場合、DNS サーバー、NetBIOS ネーム サーバー、HOSTS ファイル、または LMHOSTS ファイルに適切なエントリを作成して問題を解決します。

Note

コンピューターで使用される名前解決の方法は、コンピューターの NetBIOS ノードの型によって異なります。 NetBIOS ノードの種類の詳細については、「 NetBIOS 名前解決」を参照してください。

BizTalk Server とリモート サーバー間のファイアウォールによって、RPC 動的ポート割り当てに必要なポートがブロックされていないことを確認する

ネットワーク経由の MSDTC 機能は、ネットワーク経由の RPC 機能に依存します。 ファイアウォールを介して RPC 機能を使用するには、RPC 動的ポート割り当てに対応できるよう特定のポートを開いておく必要があります。 BizTalk Serverとリモート サーバーの間にファイアウォールが配置されている場合は、「RPC 動的ポート割り当てを構成して、RPC 動的ポート割り当てに対応するようにファイアウォールを操作する方法」の手順に従います。

適切な MSDTC セキュリティ構成オプションの設定

Windows のセキュリティ強化により、ネットワーク経由での MSDTC へのアクセス方法を制御できるようになりました。 MSDTC のセキュリティ設定を変更することにより、MSDTC とリモート コンピューター間のネットワーク経由の通信を制御できます。 次の表に、MSDTC のセキュリティ設定の構成時に使用できるオプションの推奨値を示します。

構成オプション 既定値 推奨値
ネットワーク DTC アクセス 無効 Enabled
クライアントおよび管理
リモート クライアントを許可する 無効 無効
リモート管理を許可する 無効 無効
トランザクション マネージャー通信
受信を許可する 無効 Enabled
送信を許可する 無効 Enabled
相互認証を必要とする 有効 すべてのリモート コンピューターで Windows Server 2003 SP1 または Windows XP SP2 以降が実行され、"相互認証を必要とする" を指定して構成されている場合は有効
着信呼び出し側には認証を必要とする 無効 クラスター上で MSDTC を実行している場合は、有効
認証を必要としない 無効 リモート コンピューターで Windows Server 2003 SP1 または XP SP2 より前の OS を実行している場合は、有効
トランザクション インターネット プロトコル (TIP) を有効にする 無効 BAM ポータルを実行している場合に有効になります。
XA トランザクションを有効にする 無効 MQSeries アダプターを使用して IBM WebSphere MQ と通信する場合など、XA ベースのトランザクション システムと通信する場合は、有効

これらの変更を適用した後で、MSDTC サービスが再起動されます。

MSDTC セキュリティ構成オプションにアクセスするには、次の手順を実行します。

  1. [ スタート] をクリックし、[ 実行] をクリックし、「 dcomcnfg 」と入力して 、Component Services管理コンソールを起動します。

  2. クリックして [コンポーネント サービス] を展開し、[コンピューター] をクリックして展開 します

  3. [ マイ コンピューター] をクリックして展開し、[ 分散トランザクション コーディネーター] をクリックして展開し、[ ローカル DTC] を右クリックして、[ プロパティ] をクリックします。

  4. [ローカル DTC プロパティ] ダイアログの [セキュリティ] タブをクリックします。

Note

変更内容によっては、変更を反映するためにコンピューターの再起動が必要となる場合があります。 変更を適用して MSDTC サービスを再起動しても問題が解消しない場合は、変更を行ったコンピューターを再起動して、確実に変更が有効になるようにします。

[相互認証が必要] または [着信呼び出し元認証が必要] 構成オプションが有効になっている場合は、クライアントコンピューター アカウントにネットワーク ユーザー権限からこのコンピューターにアクセスする権限が付与されている必要があります。 クライアント コンピューターのコンピューター アカウントにネットワーク ユーザー権限 からこのコンピューターへのアクセス 権が付与されていない場合、またはネットワーク ユーザー権限 からこのコンピューターへのアクセスを拒否する権限に 含まれている場合、クライアント コンピューターとサーバー コンピューター間の DTC 通信は失敗します。

既定の設定では、[すべてのユーザー] グループに [ネットワーク からこのコンピューターにアクセスする ] 権限が付与されます。 したがって、既定の設定が変更されていない限り、このユーザー権限を変更する必要はありません。 [ 認証が必要ありません ] 構成オプションが有効になっている場合、ネットワーク ユーザー権限 からこのコンピューターにアクセス しても、クライアント コンピューター アカウントには適用されません。

"ネットワーク経由でコンピューターへアクセス" ユーザー権限を付与されるユーザーまたはグループを変更するには、次の手順を実行します。

  1. [ スタート] ボタンをクリックし、[ 実行] をクリックし、「 Gpedit.msc」と入力して、[OK] をクリック します

  2. ローカル コンピューターのポリシー一覧で次の項目を展開します。

    • コンピューターの構成

    • Windows の設定

    • セキュリティ設定

    • ローカル ポリシー

  3. [ユーザー権利の割り当て] をクリックします。

  4. [ネットワークからこのコンピューターにアクセスする] をダブルクリックし、[ユーザーまたはグループの追加] をクリックします。

  5. [ オブジェクトの種類] をクリックし、[ コンピューター ] を選択して [OK] をクリック します

  6. [選択するオブジェクト名を入力してください] 領域に、コンピューター名またはグループ 名を 追加します。

  7. [ 名前の確認] をクリックして、エントリを確認します。

  8. [OK] を 2 回クリックします。

    ネットワーク ユーザー権限 からこのコンピューターへのアクセスを拒否する権限に 含まれるユーザーまたはグループを変更するには、次の手順に従います。

  9. ローカル コンピューターのポリシー一覧で次の項目を展開します。

    • コンピューターの構成

    • Windows の設定

    • セキュリティ設定

    • ローカル ポリシー

  10. [ユーザー権利の割り当て] をクリックします。

  11. [ネットワークからこのコンピューターへのアクセスを拒否する] をダブルクリックし、このユーザーから削除するコンピューター名またはグループを右クリックして選択します。

  12. [ 削除] をクリックし、[OK] をクリック します

EnableAuthEpResolution オプションと RestrictRemoteClients オプションに、適切な値を設定します。

Windows のセキュリティ強化により、RPC インターフェイスへは必ず認証された呼び出しを行う必要があります。 この機能は、 EnableAuthEpResolution および RestrictRemoteClients レジストリ キーを使用して構成できます。 リモート コンピューターが RPC インターフェイスにアクセスできるように、次の手順を実行します。

警告

レジストリ エディターの使用方法を誤ると、問題が発生し、オペレーティング システムの再インストールが必要になる場合があります。 問題が発生する可能性のあることを十分に認識したうえで利用してください。 レジストリのバックアップ、復元、変更の方法の詳細については、「Microsoft Windows レジストリの説明」の「Microsoft サポート技術情報の記事」を参照してください。

  1. [ スタート] ボタンをクリックし、[ 実行] をクリックし、「 regedit.exe」と入力し、[ OK] をクリックして レジストリ エディターを起動します。

    HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT に移動します

  2. RPC キーの下に、指定された値を含む次の DWORD エントリを作成します。 RPC キーが存在しない場合は、作成する必要があります。

    DWORD エントリ 既定値 推奨値
    EnableAuthEpResolution 0 (無効) 1
    RestrictRemoteClients 1 (有効) 0
  3. レジストリ エディタを閉じます。

  4. MSDTC サービスを再起動します。

Note

変更内容によっては、変更を反映するためにコンピューターの再起動が必要となる場合があります。 変更を適用して MSDTC サービスを再起動しても問題が解消しない場合は、変更を行ったコンピューターを再起動して、確実に変更が有効になるようにします。

Windows ファイアウォールが稼働中の場合、MSDTC サービスの例外を追加

Windows ファイアウォール サービスが、コンピューター間の MSDTC 通信をブロックする場合があります。 コンピューター間で MSDTC 通信がブロックされないようにするため、Windows ファイアウォール サービスが実行されている場合は、Windows ファイアウォールの例外リストに msdtc.exe を追加します。

  1. [ スタート] ボタンをクリックし、[ 実行] をクリックし、「 firewall.cpl」と入力し、[ OK] を クリックして [ Windows ファイアウォール ] ダイアログ ボックスを表示します。

  2. [ Windows ファイアウォール経由でプログラムを許可 する] をクリックして、[ Windows ファイアウォールの設定] ダイアログ ボックスを表示します。

  3. [Windows ファイアウォールの設定] ダイアログ ボックスの [例外] タブをクリックします。

  4. [ プログラムの追加] をクリックして、[ プログラムの追加 ] ダイアログ ボックスを表示します。

  5. [ 参照 ] をクリックし、 %system32%\msdtc.exe に移動します。

    Note

    コマンド プロンプトを起動し、「 echo %system32% 」と入力し、 Enter キー を押して、このコンピューター上の \System32 ディレクトリの場所を確認します。

  6. クリックして [msdtc.exe ] を選択し、[ 開く] をクリックします。

  7. [ スコープの変更 ] をクリックして、MSDTC 通信を許可するコンピューターのセットを指定し、[OK] をクリック します

  8. [プログラムの追加] ダイアログ ボックスで [OK] をクリックし、[Windows ファイアウォールの設定] ダイアログ ボックスで [OK] をクリックします

  9. [Windows ファイアウォール] ダイアログ ボックスを閉じます。

  10. 分散トランザクション コーディネーター サービスを停止して再起動します。

    • コマンド プロンプトを起動し、「 net stop msdtc」 と入力して Enter キーを押します。

    • 分散トランザクション コーディネーター サービスが停止したら、「 net start msdtc 」と入力し、 Enter キーを押します。

DTCTester または DTCPing を使用してネットワーク経由で MSDTC 機能を確認する

SQL Serverがいずれかのコンピューターにインストールされている場合は、Test-Dtc コマンドレットを使用して 2 台のコンピューター間のトランザクションのサポートを確認します。 詳細については、「Windows PowerShell: Test-Dtc」を参照してください。

2 台のコンピューターのどちらにも SQL Server がインストールされていない場合は、DTCPing を使用してそれらのコンピューター間のトランザクション サポートを確認します。 DTCPing ツールは、クライアント コンピューターとサーバー コンピューターの両方で実行する必要があります。いずれのコンピューターにも SQL Server がインストールされていない場合は、DTCTester ユーティリティの適切な代替手段になります。 DTCPing の詳細については、「 MS DTC ファイアウォールの問題をトラブルシューティングする方法 」および「ファイアウォール経由で 動作するように Microsoft 分散トランザクション コーディネーター (DTC) を構成する」を参照してください。

重要

DTCPing が"WARNING:両方のテスト マシンの CID 値が同じ" という警告を返す場合は、「 MSDTC に一意の CID 値が割り当てられていることを確認 する」セクションの手順に従って、テスト マシン間の適切な MSDTC 機能に対応します。

MSDTC に一意の CID 値が割り当てられていることを確認する

Windows オペレーティング システムの MSDTC 機能がコンピューター間で正しく動作するには、一意の CID 値が必要です。 インストールした Windows のディスク イメージを複製した場合は、複製ごとに一意の CID 値が設定されていなければ MSDTC が正しく機能しない可能性があります。 この状況は、仮想ハード ディスクを使用して仮想マシンにオペレーティング システムを配置した場合に発生します。

Windows オペレーティング システムを実行しているコンピューターの MSDTC CID 値が一意かどうかを判定するには、両方のコンピューター上で、HKEY_CLASSES_ROOT\CID レジストリ キーの下のエントリの値を調べます。 これらの値がコンピューターごとに一意でない場合は、「 分散トランザクション コーディネーター サービスの再インストールを検討する 」セクションの手順に従ってください。その他のトラブルシューティング手順でいずれかのコンピューターに MSDTC を再インストールできない場合は、そのコンピューターに固有の MSDTC CID 値が生成され、適切な MSDTC 操作に対応します。

"New transaction cannot enlist in the specified transaction coordinator (0x8004d00a)" というエラーの発生 (クライアント コンピューターとサーバー コンピューターの間の MSDTC 接続が閉じられた場合)

特定のシナリオでは、クライアントとサーバー間の既存の MSDTC 接続が閉じられ、その後この接続を使用しようとすると、次のエラー メッセージが表示される可能性があります。新しいトランザクションは、指定したトランザクション コーディネーターに参加できません (0x8004d00a) 詳細については、「 MS DTC でトランザクションを開始しようとしたときに、新しいトランザクションを指定したトランザクション コーディネーターに参加できない」を参照してください。

トラブルシューティングの手順で問題が解決しなかった場合に、分散トランザクション コーディネーター サービスの再インストールを検討する

MSDTC を使用したトラブルシューティングで問題が解決されなかった場合は、MSDTC のアンインストールおよび再インストールを検討してください。 MSDTC をアンインストールおよび再インストールするには、次の手順に従います。

  1. 管理者としてコマンド プロンプトを開きます。

  2. コマンド プロンプトで、次のように入力して分散トランザクション コーディネーター サービスをアンインストールします。 msdtc -uninstall

  3. コマンド プロンプトで、次のように入力して分散トランザクション コーディネーター サービスをインストールします。 msdtc –install

重要

MSDTC を再インストールすると、分散トランザクション コーディネーター サービスの既定の動作が変更される場合があります。 MSDTC の再インストール後に、以下の手順に従って、分散トランザクション コーディネーター サービスが正しく動作することを確認してください。

  • MSDTC を再インストールすると、MSDTC セキュリティ構成オプションが既定値に戻る場合があります。 MSDTC の再インストール後に、MSDTC セキュリティ構成オプションが適切な値に設定されていることを確認してください。
    • MSDTC を再インストールすると、分散トランザクション コーディネーター サービスの [スタートアップの種類] の値が変更される場合があります。 MSDTC を再インストールした後、分散トランザクション コーディネーター サービスの [スタートアップの種類] の値が [自動] に設定されていることを確認します。
    • MSDTC を再インストールするには、コンピューターを再起動する必要がある場合があります。 分散トランザクション コーディネーター サービスを正しく動作させるには、MSDTC の再インストール後にコンピューターを再起動してください。

参照

Windows Server クラスタートラブルシューティングのトラブルシューティングに使用するツールとユーティリティ