Не удается запустить распределенную транзакцию



я пытаюсь запустить 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-сервера разговаривать друг с другом?



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





  • Не удалось выполнить операцию, так как поставщик OLE DB "SQLNCLI10"... (*имя связанного сервера (null))


  • Ошибка распределенной транзакции? ( использование поставщика Oracle)


  • Невозможно подключиться к распределенной транзакции с помощью NHibernate (использование Hibernate)


  • Ошибка при использовании распределенной транзакции в SQL Server 2008 R2 ( SQL Server 2008 R2, нет ответ)


  • Ошибка Распределенной Транзакции Только Через Код (причина объединения)


  • Ошибка при выполнении координатора распределенных транзакций на связанном сервере (SQL Server 2008, нет ответа)


  • Ошибка распределенной транзакции? (нет принятого ответа; только ответ не помогает)


  • Как вставить в удаленную таблицу с помощью связанного сервера Withint транзакции? (принят ответ не решает)




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





  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. проверено, что удаленный сервер может commnicate обратно, на имя, на инициирующий сервер:



        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. выдано EveryoneFull Control к:



    HKEY_LOCAL_MACHINESoftwareMicrosoftMSSQLServer


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



1267   6  

6 ответов:

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

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

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

локальный MS DTC обнаружил, что MS DTC на ASICMSTEST имеет тот же уникальный идентификатор, что и локальный MS ДИАГНОСТИЧЕСКИЙ КОД НЕИСПРАВНОСТИ. Это означает, что два MS DTC не смогут общаться между собой. Эта проблема обычно возникает, если одна из систем были клонированы с использованием неподдерживаемых инструментов клонирования. MS DTC требует, чтобы системы клонируются с помощью поддерживаемых инструментов клонирования, таких как SYSPREP. Запуск 'msdtc-удалить", а затем " переходит к установки из командной подсказка исправит проблему. Примечание: запуск "msdtc-uninstall" будет в результате система теряет все MS DTC информация о конфигурации.

дополнительную информацию см. В справке и Центре поддержки по адресу http://go.microsoft.com/fwlink/events.asp.

под управлением

msdtc -uninstall
msdtc -install

а затем остановка и перезапуск службы SQL Server исправлена.

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

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

  1. машины в одном домене? (да, не должно иметь значения с отключенной аутентификацией)
  2. брандмауэры работают на машинах? DTC может быть немного больно для брандмауэров, поскольку он использует ряд портов, см. http://support.microsoft.com/kb/306843 на данный момент я бы отключил брандмауэры ради выявления проблемы
  3. Что значит код неисправности пинг говоришь? 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-сервер через связанный сервер красиво, но я не мог заставить его разрешить распределенную транзакцию. Я даже мог видеть соединение на сервере QA с сервера DEV, но что-то не совершало поездку спина.

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

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

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

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

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

Comments

    Ничего не найдено.