Не удается запустить распределенную транзакцию
я пытаюсь запустить 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 транзакции? (принят ответ не решает)
что я есть сделано не имеет значения, но я все равно запостил.
обеспечить
Distributed Transaction Coordinatorслужба работает на обоих machies:


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


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

ругался и ругался.
разбил вещи.
проверил, что a
SELECTможно использовать связанного сервера:
SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users
....
(763 row(s) affected)
проверил, что клиент-сервер может
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
проверено, что удаленный сервер может 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
проверил
@@SERVERNAMEсоответствует имени сервера на обоих серверах:
SELECT @@SERVERNAME, SERVERPROPERTY('MachineName')
------------- -------------
ASITESTSERVER ASITESTSERVER
и
SELECT @@SERVERNAME, SERVERPROPERTY('MachineName')
---------- ----------
ASIGROBTEST ASIGROBTEST
кричала
выданное
SET XACT_ABORT ONперед выдачей запроса:
SET XACT_ABORT ON
GO
BEGIN DISTRIBUTED TRANSACTION
SELECT TOP 1 * FROM Sessions
выдано
EveryoneFull Controlк:
HKEY_LOCAL_MACHINESoftwareMicrosoftMSSQLServer
на обоих серверах.
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, работает разрешение имен, работают связанные серверы, и вы отключили аутентификацию транзакций.
моя кишка говорит, что проблема брандмауэра, но несколько вещей приходят на ум...
- машины в одном домене? (да, не должно иметь значения с отключенной аутентификацией)
- брандмауэры работают на машинах? DTC может быть немного больно для брандмауэров, поскольку он использует ряд портов, см. http://support.microsoft.com/kb/306843 на данный момент я бы отключил брандмауэры ради выявления проблемы
- Что значит код неисправности пинг говоришь? http://www.microsoft.com/download/en/details.aspx?id=2868
- С какой учетной записью работает служба 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