103

リンクサーバーに対してSQLを実行しようとしていますが、以下のエラーが発生します。

BEGIN DISTRIBUTED TRANSACTION
SELECT TOP 1 * FROM Sessions


OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".

Msg 7391, Level 16, State 2, Line 3
The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.

プロバイダーから返されるエラーは2つあります。

エラー#1:

Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".
HelpFile: 
HelpContext: $00000000
SQLState: 01000
NativeError: 7412

エラー#2

Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.
HelpFile: 
HelpContext: $00000000
SQLState: 42000
NativeError: 7391

マイクロソフトにセキュリティよりも機能を優先させるにはどうすればよいですか?

または、少なくとも、2つのSQLサーバーを相互に通信させるにはどうすればよいですか?

関連する質問


がしたことは無関係ですが、とにかく投稿します。

  1. Distributed Transaction Coordinatorサービスが両方のマチで実行されていることを確認します。

    ここに画像の説明を入力してください

    ここに画像の説明を入力してください

  2. 両方のマシンですべてのMSDTCセキュリティを無効にします。

    ここに画像の説明を入力してください

    ここに画像の説明を入力してください

  3. リンクサーバーでランダムオプションをオンにします。

ここに画像の説明を入力してください

  1. 呪われて誓った。

  2. 物を壊した。

  3. リンクサーバーSELECTを使用できることを確認しました:

        SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users
        ....
    
        (763 row(s) affected)
    
  4. クライアントサーバーがpingリモートサーバーに対応できることを確認しました。

         C:\Documents and Settings\avatar>ping asicmstest.contoso.com
    
         Pinging asicmstest.contoso.com [10.0.0.40] with 32 bytes of data:
    
         Reply from 10.0.0.40: bytes=32 time<1ms TTL=128
         Reply from 10.0.0.40: bytes=32 time<1ms TTL=128
         Reply from 10.0.0.40: bytes=32 time<1ms TTL=128
         Reply from 10.0.0.40: bytes=32 time<1ms TTL=128
    
         Ping statistics for 10.0.0.40:
             Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
         Approximate round trip times in milli-seconds:
             Minimum = 0ms, Maximum = 0ms, Average = 0ms
    
  5. リモートサーバーが名前で開始サーバーに通信できることを確認しました。

         C:\Documents and Settings\avatar>ping asitestserver.contoso.com
    
         Pinging asitestserver.contoso.com [10.0.0.22] with 32 bytes of data:
    
         Reply from 10.0.0.22: bytes=32 time<1ms TTL=128
         Reply from 10.0.0.22: bytes=32 time<1ms TTL=128
         Reply from 10.0.0.22: bytes=32 time<1ms TTL=128
         Reply from 10.0.0.22: bytes=32 time<1ms TTL=128
    
         Ping statistics for 10.0.0.22:
             Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
         Approximate round trip times in milli-seconds:
             Minimum = 0ms, Maximum = 0ms, Average = 0ms
    
  6. @@SERVERNAME両方のサーバーのサーバー名と一致することを確認しました:

       SELECT @@SERVERNAME, SERVERPROPERTY('MachineName')
    
       -------------  -------------
       ASITESTSERVER  ASITESTSERVER
    

       SELECT @@SERVERNAME, SERVERPROPERTY('MachineName')
    
       ----------  ----------
       ASIGROBTEST  ASIGROBTEST
    
  7. 悲鳴を上げる

  8. SET XACT_ABORT ONクエリを発行する前に発行:

    SET XACT_ABORT ON
    GO
    BEGIN DISTRIBUTED TRANSACTION
    SELECT TOP 1 * FROM Sessions
    
  9. 付与Everyone Full Control_

    HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer
    

    両方のサーバーで。

4

10 に答える 10

33

それを見つけた、リモートサーバー上のMSDTCはローカルサーバーのクローンでした。

Windowsアプリケーションイベントログから:

イベントタイプ:エラー
イベントソース:MSDTC
イベントカテゴリ:CM
イベントID:4101
日付:2011年9月19日
時間:1:32:59 PM
ユーザー:N / A
コンピューター:ASITESTSERVER
説明:

ローカルMSDTCは、ASICMSTEST上のMSDTCがローカルMSDTCと同じ一意のIDを持っていることを検出しました。これは、2つのMSDTCが相互に通信できないことを意味します。この問題は通常、サポートされていないクローン作成ツールを使用してシステムの1つがクローン作成された場合に発生します。MS DTCでは、SYSPREPなどのサポートされているクローン作成ツールを使用してシステムのクローンを作成する必要があります。コマンドプロンプトから「msdtc-uninstall」を実行してから「msdtc-install」を実行すると、問題が修正されます。注:「msdtc-uninstall」を実行すると、システムはすべてのMSDTC構成情報を失います。

詳細については、ヘルプとサポートセンター( http://go.microsoft.com/fwlink/events.asp )を参照してください。

ランニング

msdtc -uninstall
msdtc -install

その後、SQLServerサービスを停止して再起動すると修正されました。

于 2011-09-19T18:47:55.587 に答える
18

「RPCの分散トランザクションのプロモーションを有効にする」を無効にする(つまり、に設定する)ことで、この問題を解決できました(コメントで他の人が言及しているようにFalse)。

ここに画像の説明を入力してください

@WonderWorkerの要求に応じて、SQLスクリプトを介してこれを行うことができます。

EXEC master.dbo.sp_serveroption
     @server = N'[mylinkedserver]',
     @optname = N'remote proc transaction promotion',
     @optvalue = N'false'
于 2019-07-29T21:11:33.017 に答える
7

OK、サービスが開始され、サービス間にイーサネットパスがあり、名前解決が機能し、リンクサーバーが機能し、トランザクション認証を無効にしました。

私の腸はファイアウォールの問題を言っていますが、いくつかのことが頭に浮かびます...

  1. マシンは同じドメインにありますか?(ええ、認証を無効にしても問題ありません)
  2. ファイアウォールはマシン上で実行されていますか?DTCは、さまざまなポートを使用するため、ファイアウォールにとって少し苦痛になる可能性があります。http://support.microsoft.com/kb/306843を参照してください 。当面は、問題を特定するためにファイアウォールを無効にします。
  3. DTC pingは何と言っていますか? http://www.microsoft.com/download/en/details.aspx?id=2868
  4. SQLサービスはどのアカウントとして実行されていますか?
于 2011-09-19T18:30:11.797 に答える
2

サーバーがクラスター化されており、クラスター化されたDTCがある場合は、ローカルDTCではなくクラスター化されたDTCのセキュリティを無効にする必要があります。

于 2014-10-09T19:15:43.833 に答える
2

私にとって、それはファイアウォールの設定に関連しています。ファイアウォール設定に移動し、DTCサービスを許可すると機能しました。ここに画像の説明を入力してください

于 2020-01-02T09:58:58.150 に答える
1

MSDTCでの私の最後の冒険と今日のこのエラーは、DNSの問題であることが判明しました。あなたは、マシンが同じドメイン、EBarrにあるかどうかを尋ねる正しい方向に進んでいます。ちなみに、この問題の素晴らしいリストです!

私の状況:ファイアウォールを介して親ドメインのサーバーに対して分散トランザクションを実行できるようにするには、子ドメインのサーバーが必要でした。私は何年にもわたってリンクサーバーをかなり使用してきたので、リンクサーバーのSQLとMSDTCで、Ianが上で非常にうまく文書化した通常の設定をすべて持っていました。両方のサーバーで使用するTCPポートの範囲(5000-5200)を使用してMSDTCをセットアップし、ポート1433と5000-5200のボックスの間にファイアウォールホールを配置しました。それはうまくいくはずだった。リンクサーバーは正常にテストされ、リンクサーバーを介してリモートSQLサーバーに適切にクエリを実行できましたが、分散トランザクションを許可するように取得できませんでした。DEVサーバーからQAサーバーへの接続を確認することもできましたが、何かが戻ってこなかったのです。

PING DEVSQL.dev.domain.comのようなFQDNを使用して、QAからDEVサーバーにPINGを実行できます。

マシン名だけでDEVサーバーにPINGできませんでした:PING DEVSQL

DEVSQLサーバーは両方のドメインのメンバーであるはずでしたが、名前が親ドメインのDNSで解決されていませんでした...親ドメインのDEVSQLのマシンアカウントに何かが発生しました。親ドメインのDNSにDEVSQLを追加し、「PING DEVSQL」がリモートQAサーバーから機能するようになると、この問題は解決されました。

これがお役に立てば幸いです。

于 2013-10-15T08:35:38.000 に答える
1

宛先サーバーが別のクラウドまたはデータセンターにある場合は、ソースサーバーにMSDTCサービス(宛先サーバー)のホストエントリを追加する必要があります。

問題が解決しない場合は、MSDTC設定を有効にした後、これを試してください。

于 2017-04-01T10:26:30.463 に答える
0

セキュリティ設定とは別に、トランザクションを実行するには、両方のサーバーでいくつかのポートを開く必要がありました。ポート59640を開く必要がありましたが、次の提案によれば、ポート135を開く必要があります。 http://support.microsoft.com/kb/839279

于 2015-03-10T15:48:28.470 に答える
0

同じエラーが発生し、ソースサーバーでMSDTCを適切に構成して、アウトバウンドを許可し、Windowsファイアウォールを通過するDTCを許可することで問題を解決できました。

分散トランザクションコーディネーター、ティックドメイン、プライベートおよびパブリックオプションを許可する

于 2019-10-18T12:45:49.283 に答える
0

DTCにプライベートとパブリック、およびドメインのチェックを許可するファイアウォール設定がそのトリックを実行しました。ドメインだけでは十分ではありません(そうあるべきだと感じますが、いや)。

于 2021-08-11T17:21:41.583 に答える