1. ホーム
  2. sql-server

[解決済み] 分散型トランザクションを開始できない

2022-02-10 21:40:53

質問

リンクされたサーバーに対して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 Seversを互いに会話させるにはどうしたらいいでしょうか?

関連する質問


私とは ある は関係ないのですが、とりあえず投稿しておきます。

  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
    
    

    を両サーバーで実行します。

解決方法は?

リモートサーバーのMSDTCがローカルサーバーのクローンであることを発見しました。

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

イベントの種類 エラー
イベントのソース MSDTC
イベントのカテゴリー CM
イベントID 4101
日付:2011年9月19日
時刻: 午後1時32分59秒
ユーザー:N/A
コンピュータ アシテスツサーバー
説明

ローカルMS DTCは、以下のことを検出しました。 ASICMSTEST上のMS DTCは、ローカルMSと同じ一意のIDを持っています。 DTC。これは、2つのMS DTCが通信できないことを意味します。 との通信が可能です。この問題は、通常、どちらかのシステムが は、サポートされていないクローンツールを使用してクローンされました。MS DTCは、以下のことを要求します。 システムは、SYSPREP などのサポートされているクローン化ツールを使用してクローン化されています。 コマンドラインから 'msdtc -uninstall' を実行し、次に 'msdtc -install' を実行します。 プロンプトを表示すると、問題が解決します。注意:'msdtc -uninstall'を実行すると、次のような問題が発生します。 その結果、システムはすべてのMS DTC設定情報を失います。

詳細については、ヘルプ&サポートセンターで http://go.microsoft.com/fwlink/events.asp .

実行中

msdtc -uninstall
msdtc -install

を実行し、SQL Server サービスを停止して再起動すると、直りました。