Невозможно начать распределенную транзакцию

я пытаюсь запустить 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.

поставщик возвращает две ошибки:

Ошибка #1:

Number: 040E14
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: 000000
SQLState: 01000
NativeError: 7412

Ошибка #2

Number: 040E14
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: 000000
SQLState: 42000
NativeError: 7391

как заставить Microsoft отдать предпочтение функциональности перед безопасностью?

или, по крайней мере, как я могу заставить два SQL Severs разговаривать друг с другом?

обзоры вопросы


что я есть сделано не имеет значения, но я все равно запостил.

  1. обеспечить Distributed Transaction Coordinator служба работает на обоих machies:

    enter image description here

    enter image description here

  2. отключить все MSDTC безопасность на обеих машинах:

    enter image description here

    enter image description here

  3. включить случайные параметры на связанном сервере:

enter image description here

  1. ругался и ругался.

  2. разбил вещи.

  3. проверено, что a SELECT можно использовать связаны сервер:

       SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users
       ....
    
       (763 row(s) affected)
    
  4. проверено, что клиентский сервер может ping удаленный сервер:

        C:Documents and Settingsavatar>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 Settingsavatar>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 to:

    HKEY_LOCAL_MACHINESoftwareMicrosoftMSSQLServer
    

    на обоих серверах.

6 ответов


найдено, MSDTC на удаленном сервере был клоном локального сервера.

из журнала событий приложений Windows:

Тип События: Ошибка
Источник события: MSDTC
Категория события: CM
Код события: 4101
Дата: 9/19/2011
Время: 1: 32: 59 PM
Пользователь: N / A
Компьютер: ASITESTSERVER
Описание:

локальный MS DTC обнаружил, что MS DTC на ASICMSTEST имеет тот же уникальный идентификатор, что и локальный MS ДИАГНОСТИЧЕСКИЙ КОД НЕИСПРАВНОСТИ. Это означает, что два 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 исправили его.


OK, Итак, службы запущены, между ними есть путь ethernet, работает разрешение имен, работают связанные серверы, и вы отключили аутентификацию транзакций.

моя кишка говорит, что проблема брандмауэра, но несколько вещей приходят на ум...

  1. машины в одном домене? (да, не должно иметь значения с отключенной аутентификацией)
  2. брандмауэры работают на машинах? DTC может быть немного больно для брандмауэров, поскольку он использует ряд портов, см. http://support.microsoft.com/kb/306843 на данный момент я бы отключил брандмауэры ради выявления проблемы
  3. что говорит DTC ping? http://www.microsoft.com/download/en/details.aspx?id=2868
  4. какая учетная запись запущена как Служба SQL?

Если серверы кластеризованы и есть кластеризованный DTC, вы должны отключить безопасность на кластеризованном DTC, а не локальном DTC.


Если ваш сервер назначения находится на другом облаке или дата-центре, то нужно добавить хост-запись служба MSDTC (сервер назначения) на исходном сервере.

попробуйте это, если проблема не решена, после включения настроек MSDTC.


мое последнее приключение с MSDTC, и эта ошибка сегодня оказалась проблемой DNS. Вы на правильном пути, спрашивая, находятся ли машины в одном домене, EBarr. Потрясающий список для этого номера, кстати!

моя ситуация: мне нужен сервер в дочернем домене, чтобы иметь возможность запускать распределенные транзакции против сервера в Родительском домене через брандмауэр. Я использовал связанные серверы довольно много лет, поэтому у меня были все обычные настройки в SQL для связанного сервера и в MSDTC, который Ян так хорошо документировал выше. Я настроил MSDTC с диапазоном TCP-портов (5000-5200) для использования на обоих серверах и организовал отверстие брандмауэра между ящиками для портов 1433 и 5000-5200. Это должно было сработать. Связанный сервер протестирован нормально, и я мог бы запросить удаленный SQL server через связанный сервер, но я не мог заставить его разрешить распределенную транзакцию. Я даже мог видеть соединение на сервере QA с сервером DEV, но что-то не делало поездку спина.

Я мог бы пинговать сервер DEV из QA, используя FQDN, как: PING DEVSQL.dev.domain.com

Я не мог пинговать сервер DEV только с именем машины: PING DEVSQL

сервер DEVSQL должен был быть членом обоих доменов, но имя не разрешалось в DNS родительского домена... что-то случилось с учетной записью компьютера для DEVSQL в Родительском домене. Как только мы добавили DEVSQL в DNS для родительского домена, и" ping DEVSQL " работал с удаленного сервера QA эта проблема была решена для нас.

надеюсь, это поможет!


только настройки безопасности, мне пришлось открыть некоторые порты на обоих серверах для транзакций. Мне пришлось открыть порт 59640, но, согласно следующему предложению, порт 135 должен быть открыт. http://support.microsoft.com/kb/839279