Windows Server 2003 または Windows XP Service Pack 2 のインストール後、リンク サーバーに対して分散トランザクションを実行すると SQL Server 2000 でエラー メッセージ 7391 が表示される

文書翻訳 文書翻訳
文書番号: 839279 - 対象製品
重要 : この資料には、レジストリの編集方法が記載されています。万一に備えて、編集の前には必ずレジストリをバックアップし、レジストリの復元方法を理解しておいてください。バックアップ、復元、および編集方法の詳細を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
256986 Microsoft Windows レジストリの説明
すべて展開する | すべて折りたたむ

目次

現象

SQL Server のインスタンスに対して分散トランザクションを実行すると、次のようなエラー メッセージが表示されることがあります。

サーバー : メッセージ 7391、レベル 16、状態 1、行 1
OLE DB プロバイダ 'SQLOLEDB' は分散トランザクションを開始できなかったので、要求した操作は実行されませんでした。[OLE/DB provider returned message: 指定されたトランザクション コーディネータに、新規トランザクションを参加できませんでした。] OLE DB エラー トレース [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。


この現象は、以下の条件のいずれかに該当する場合に発生することがあります。
  • 分散トランザクションを開始するコンピュータに Microsoft Windows Server 2003 または Microsoft Windows XP Service Pack 2 (SP2) がインストールされています。
  • Microsoft SQL Server 2000 を実行しているリモート コンピュータに Microsoft Windows Server 2003 または Microsoft Windows XP SP2 がインストールされていて、そのコンピュータが分散トランザクションを開始するコンピュータにリンクされています。

原因

この問題は、次のいずれかの原因または複数の原因によって発生することがあります。
  • Microsoft 分散トランザクション コーディネータ (MSDTC) がネットワーク トランザクションに対して無効になっています。
  • コンピュータで Windows ファイアウォールが有効になっています。Microsoft 分散トランザクション コーディネータ (MSDTC) は、デフォルトで Windows ファイアウォールによってブロックされます。

    : この問題は、Windows ファイアウォールを無効にしても発生することがあります。

回避策

警告 : レジストリ エディタまたは別の方法を使用してレジストリを誤って変更すると、深刻な問題が発生することがあります。最悪の場合、オペレーティング システムの再インストールが必要になることがあります。マイクロソフトは、レジストリの変更により発生した問題に関しては、一切責任を負わないものとします。レジストリの変更は、自己の責任において行ってください。

この問題を回避するには、Windows Server 2003 または Windows XP SP2 がインストールされているコンピュータで以下の手順を実行します。
  1. MSDTC サービスのログオン アカウントが [ネットワーク サービス] になっていることを確認します。これを行うには、以下の手順を実行します。
    1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    2. [名前] ボックスに services.msc と入力し、[OK] をクリックします。
    3. [サービス] ウィンドウの右側に表示されている一覧で、[名前] 列の中から [Distributed Transaction Coordinator] サービスを探します。
    4. このサービスの [ログオン] タブの表示が [ネットワーク サービス] になっているか [ローカル システム] になっているかを確認します。

      [ログオン] に表示されているアカウントが [ネットワーク サービス] である場合は、手順 2. に進みます。[ログオン] に表示されているアカウントが [ローカル システム] である場合は、次の手順に進みます。
    5. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    6. [ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに cmd と入力し、[OK] をクリックします。
    7. コマンド プロンプトで net stop msdtc と入力して、MSDTC サービスを停止します。
    8. コマンド プロンプトで Msdtc -uninstall と入力して MSDTC を削除します。
    9. コマンド プロンプトで regedit と入力して、レジストリ エディタを起動します。
    10. レジストリ エディタで、次のキーに移動します。

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC


      このキーを削除します。
    11. レジストリ エディタを終了します。
    12. コマンド プロンプトで Msdtc -install と入力して、MSDTC をインストールします。
    13. コマンド プロンプトで net start msdtc と入力して、MSDTC サービスを開始します。

      これにより、MSDTC サービスの [ログオン] タブに表示されているアカウントが [ネットワーク サービス] に設定されます。
  2. MSDTC のネットワーク トランザクションを有効にします。これを行うには、以下の手順を実行します。
    1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    2. [ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに dcomcnfg.exe と入力し、[OK] をクリックします。
    3. [コンポーネント サービス] ウィンドウで、[コンポーネント サービス]、[コンピュータ]、[マイ コンピュータ] を順に展開します。
    4. [マイ コンピュータ] を右クリックし、[プロパティ] をクリックします。
    5. [マイ コンピュータのプロパティ] ダイアログ ボックスの [MSDTC] タブをクリックし、[セキュリティの構成] をクリックします。
    6. [セキュリティの構成] ダイアログ ボックスで、[ネットワーク DTC アクセス] チェック ボックスをオンにします。
    7. このコンピュータで、リモート コンピュータからの分散トランザクションの実行を許可するには、[トランザクション マネージャ通信] の [受信を許可する] チェック ボックスをオンにします。
    8. このコンピュータからリモート コンピュータでの分散トランザクションの実行を許可するには、[トランザクション マネージャ通信] の [送信を許可する] チェック ボックスをオンにします。
    9. [トランザクション マネージャ通信] の [認証を必要としない] をクリックします。
    10. [セキュリティの構成] ダイアログ ボックスで [OK] をクリックします。
    11. [マイ コンピュータのプロパティ] ダイアログ ボックスで [OK] をクリックします。
  3. MSDTC プログラムとポート 135 を例外に含めるように Windows ファイアウォールを構成します。これを行うには、次の手順を実行します。
    1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    2. [ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに Firewall.cpl と入力し、[OK] をクリックします。
    3. クラシック表示のコントロール パネルでは、[Windows ファイアウォール] をダブルクリックします。
    4. [Windows ファイアウォール] ダイアログ ボックスの [例外] タブをクリックし、[プログラムの追加] をクリックします。
    5. [プログラムの追加] ダイアログ ボックスで、[参照] をクリックし、Msdtc.exe を見つけてダブルクリックします。このファイルは、デフォルトで <Installation drive>:\Windows\System32 フォルダに置かれています。
    6. [プログラムの追加] ダイアログ ボックスで [OK] をクリックします。
    7. [Windows ファイアウォール] ダイアログ ボックスで、[プログラムおよびサービス] ボックスの一覧の [msdtc] チェック ボックスをオンにします。
    8. [例外] タブの [ポートの追加] をクリックします。
    9. [ポートの追加] ダイアログ ボックスで、[ポート番号] ボックスに 135 と入力し、[TCP] をクリックします。
    10. [ポートの追加] ダイアログ ボックスで、[名前] ボックスに例外の名前を入力し、[OK] をクリックします。
    11. [Windows ファイアウォール] ダイアログ ボックスの [プログラムおよびサービス] ボックスで、手順 j. で入力した例外の名前の横にあるチェック ボックスをオンにし、[OK] をクリックします。

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

詳細

現象の再現手順

  1. Windows Server 2003 または Windows XP SP2 がインストールされているコンピュータにログオンします。
  2. クエリ アナライザを起動します。
  3. Microsoft SQL Server 2000 を実行しているリモート コンピュータをリンク サーバーとして追加します。これを行うには、クエリ アナライザで以下の Transact-SQL ステートメントを実行します。
    EXEC sp_addlinkedserver  '<remote_server>',  N'SQL SERVER'
    GO

    : 上記ステートメントの remote_server は、リンク サーバーとして使用するコンピュータの名前に置き換えます。
  4. このコンピュータとリモート コンピュータの間で分散トランザクションを実行します。これを行うには、クエリ アナライザで以下の Transact-SQL ステートメントを実行します。
    SET xact_abort ON 
    GO
    USE  pubs
    GO
    BEGIN DISTRIBUTED TRANSACTION
    SELECT  *  FROM <remote_server>.pubs.dbo.authors
    COMMIT TRAN
    GO
    
    「現象」に記載されているエラー メッセージが表示されることがあります。

関連情報

SQL Server 2000 を使用できるように Windows XP Service Pack 2 を構成する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
841249 Windows XP Service Pack 2 (SP2) を SQL Server と共に使用するように構成する方法

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 839279 (最終更新日 2005-07-15) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。

プロパティ

文書番号: 839279 - 最終更新日: 2011年5月13日 - リビジョン: 4.0
この資料は以下の製品について記述したものです。
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft Windows XP Embedded
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
キーワード:?
kbsqlmanagementtools kbregistry kberrmsg kbdtc kbdomain kbauthentication kbtransaction kbrpc kbprb KB839279
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com