Не удалось начать распределенную транзакцию
Я пытаюсь запустить 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: $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
Как заставить Microsoft поддерживать функциональность по безопасности?
Или, по крайней мере, как я могу заставить два SQL Severs разговаривать друг с другом?
Связанные вопросы
То, что я сделал, не имеет значения, но я все равно опубликую его.
-
Убедитесь, что служба Distributed Transaction Coordinator
запущена на обеих машинах:
![enter image description here]()
![enter image description here]()
-
Отключите всю безопасность MSDTC на обеих машинах:
![введите описание изображения здесь]()
![enter image description here]()
-
Включите случайные параметры на связанном сервере:
![введите описание изображения здесь]()
-
Проклят и выругался.
-
Разрушенные вещи.
-
Проверено, что SELECT
может использовать связанный сервер:
SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users
....
(763 row(s) affected)
-
Проверено, что клиентский сервер может 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
-
Проверено, что удаленный сервер может переписать по имени на исходный сервер:
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
-
Проверено, что @@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
-
Предоставлено Everyone
Full Control
до:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer
на обоих серверах.
Ответы
Ответ 1
Нашел его, MSDTC на удаленном сервере был клоном локального сервера.
В журнале событий приложений Windows:
Тип события: ошибка
Источник события: MSDTC
Категория события: CM
Код события: 4101
Дата: 19.09.2011
Время: 1:32:59 PM
Пользователь: N/A
Компьютер: ASITESTSERVER
Описание:
Локальный MS DTC обнаружил, что MS DTC на ASICMSTEST имеет тот же уникальный идентификатор, что и локальная MS DTC. Это означает, что два 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.
Ответ 2
ОК, поэтому запущены сервисы, между ними существует сетевой путь, работа по разрешению имен, работа с связанными серверами, и вы отключили аутентификацию транзакций.
В моей кишке говорится о проблеме с брандмауэром, но кое-что приходит на ум...
Ответ 3
Если серверы кластеризованы и есть кластерный DTC, вы должны отключить защиту от кластерного кода неисправности, а не локального кода DTC.
Ответ 4
Мне удалось решить эту проблему (как другие упоминали в комментариях), отключив "Включить продвижение распределенных транзакций для RPC":
![enter image description here]()
Ответ 5
Если ваш целевой сервер находится в другом облаке или центре данных, вам необходимо добавить хост-запись службы MSDTC (целевого сервера) на исходном сервере.
Попробуйте это, если проблема не решена, после включения параметров MSDTC.
Ответ 6
Мое последнее приключение с MSDTC, и эта ошибка сегодня оказалась проблемой DNS. Вы на правильном пути спрашиваете, находятся ли компьютеры в одном домене, EBarr. Потрясающий список для этой проблемы, кстати!
Мое положение: мне нужен сервер в дочернем домене, чтобы иметь возможность запускать распределенные транзакции с сервером в родительском домене через брандмауэр. За последние годы я использовал связанные серверы, поэтому у меня были все обычные настройки в SQL для связанного сервера и в MSDTC, которые Ian документировал так красиво выше. Я установил MSDTC с несколькими портами TCP (5000-5200) для использования на обоих серверах и устроил межсетевой экран между ящиками для портов 1433 и 5000-5200. Это должно сработать. Связанный сервер протестировал ОК, и я мог запросить удаленный SQL-сервер через связанный сервер красиво, но я не мог заставить его разрешить распределенную транзакцию. Я даже мог видеть соединение на сервере QA с сервером DEV, но что-то не делало поездку назад.
Я мог бы PING сервер DEV из QA использовать полное доменное имя, например: PING DEVSQL.dev.domain.com
Я не мог PING сервер DEV только с именем машины: PING DEVSQL
Предполагалось, что сервер DEVSQL является членом обоих доменов, но имя не было разрешено в доменном DNS-домене... что-то случилось с машинной учетной записью для DEVSQL в родительском домене. Когда мы добавили DEVSQL в DNS для родительского домена, а "PING DEVSQL" работал с удаленного сервера QA, эта проблема была решена для нас.
Надеюсь, это поможет!
Ответ 7
Помимо настроек безопасности, мне пришлось открыть несколько портов на обоих серверах для выполнения транзакции. Мне пришлось открыть порт 59640, но согласно следующему предложению, порт 135 должен быть открыт.
http://support.microsoft.com/kb/839279
Ответ 8
Я получил ту же ошибку, и мне удалось ее исправить, правильно настроив MSDTC на исходном сервере, чтобы разрешить исходящий и разрешить DTC через брандмауэр Windows.
Разрешить координатора распределенных транзакций, тиковый домен, частные и публичные параметры