Невозможно начать распределенную транзакцию
я пытаюсь запустить 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 разговаривать друг с другом?
обзоры вопросы
-
операция не может быть выполнена из-за поставщика OLE DB "SQLNCLI10"... (*имя связанного сервера
(null)
) - ошибка распределенной транзакции? (использование Oracle provider)
- невозможно подключиться к распределенной транзакции с помощью NHibernate (использование Hibernate)
- ошибка при использовании распределенной транзакции в SQL Server 2008 Р2 (SQL Server 2008 R2, нет ответа)
- Ошибка Распределенной Транзакции Только Через Код (причина объединения)
- ошибка при выполнении координатора распределенных транзакций на связанном сервере (SQL Server 2008, нет ответа)
- ошибка распределенной транзакции? (нет принятого ответа; только ответ не помогите!--45-->)
- как вставить в удаленную таблицу с помощью связанного сервера Withint Transaction? (принятый ответ не решает)
что я есть сделано не имеет значения, но я все равно запостил.
-
обеспечить
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
-
проверено, что удаленный сервер может связываться по имени с инициирующим сервером:
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
-
выдано
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, работает разрешение имен, работают связанные серверы, и вы отключили аутентификацию транзакций.
моя кишка говорит, что проблема брандмауэра, но несколько вещей приходят на ум...
- машины в одном домене? (да, не должно иметь значения с отключенной аутентификацией)
- брандмауэры работают на машинах? DTC может быть немного больно для брандмауэров, поскольку он использует ряд портов, см. http://support.microsoft.com/kb/306843 на данный момент я бы отключил брандмауэры ради выявления проблемы
- что говорит DTC ping? 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 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