Я пытаюсь запустить 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-сервера разговаривать друг с другом?
Связанные вопросы
- Операция не может быть выполнена, поскольку поставщик OLE DB «SQLNCLI10» ... (* имя связанного сервера
(null)
) - Ошибка распределенной транзакции? ( с использованием поставщика Oracle )
- Невозможно подключиться к распределенной транзакции с NHibernate ( с использованием Hibernate )
- Ошибка при использовании распределенной транзакции в SQL Server 2008 R2 ( SQL Server 2008 R2, нет ответа )
- Ошибка распределенной транзакции только через код ( вызвана пулом соединений )
- Ошибка при выполнении координатора распределенных транзакций на связанном сервере ( SQL Server 2008, нет ответа )
- Ошибка распределенной транзакции? ( нет принятого ответа; только ответ не помогает )
- Как вставить в удаленную таблицу с помощью связанного сервера с транзакцией? ( принятый ответ не разрешается )
То , что я бы сделал это не имеет значения, но я выложу его в любом случае.
Убедитесь, что
Distributed Transaction Coordinator
сервис работает на обоих машинах:Отключите всю безопасность MSDTC на обеих машинах:
Включите случайные параметры на связанном сервере:
Проклинал и ругал.
Разбил вещи.
Проверено,
SELECT
может ли a использовать связанный сервер :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
на обоих серверах.
Ответы:
Нашел, MSDTC на удаленном сервере был клоном локального сервера.
Из журнала событий приложений Windows:
Бег
msdtc -uninstall msdtc -install
а затем остановка и перезапуск службы SQL Server исправили это.
источник
Мне удалось решить эту проблему (как другие упоминались в комментариях), отключив «Включить продвижение распределенных транзакций для RPC» (т.е. установив его на
False
):По просьбе @WonderWorker вы можете сделать это с помощью SQL-скрипта:
источник
Итак, службы запущены, между ними есть Ethernet-путь, разрешение имен работает, связанные серверы работают, и вы отключили аутентификацию транзакций.
Моя интуиция говорит о проблеме с брандмауэром, но на ум приходит несколько вещей ...
источник
Если серверы сгруппированы и имеется кластерный DTC, необходимо отключить безопасность кластерного DTC, а не локального DTC.
источник
Если ваш целевой сервер находится в другом облаке или центре обработки данных, необходимо добавить запись хоста службы MSDTC (целевой сервер) на исходный сервер.
Попробуйте это, если проблема не решена, после включения настроек MSDTC.
источник
Для меня это связано с настройкой брандмауэра. Перейдите в настройки брандмауэра, разрешите службу DTC, и все заработало.
источник
Мое последнее приключение с MSDTC, и эта ошибка сегодня оказалась проблемой DNS. Вы на правильном пути, спрашивая, находятся ли машины в одном домене, EBarr. Кстати, потрясающий список для этого номера!
Моя ситуация: мне нужен сервер в дочернем домене, чтобы иметь возможность выполнять распределенные транзакции с сервером в родительском домене через брандмауэр. Я довольно часто использовал связанные серверы на протяжении многих лет, поэтому у меня были все обычные настройки в SQL для связанного сервера и в MSDTC, которые Ян так хорошо задокументировал выше. Я установил 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-сервера, эта проблема была решена для нас.
Надеюсь, это поможет!
источник
Помимо настроек безопасности, мне пришлось открыть несколько портов на обоих серверах для запуска транзакции. Мне пришлось открыть порт 59640, но, согласно следующему предложению, порт 135 должен быть открыт. http://support.microsoft.com/kb/839279
источник
Я получал ту же ошибку, и мне удалось ее решить, правильно настроив MSDTC на исходном сервере, чтобы разрешить исходящий трафик и разрешить DTC через брандмауэр Windows.
Разрешить координатора распределенных транзакций, указать домен, частные и общедоступные параметры
источник