У меня есть 2 сервера Windows EC2, расположенных в другом регионе. У обоих есть общедоступный IP-адрес, поэтому они могут общаться друг с другом.
Чтобы разрешить удаленный запрос, я создал связанный сервер. По сути, они находятся в другом регионе, поэтому я использовал их публичный IP-адрес в качестве источника данных. IP-адрес 1-го сервера: 13.xxx.xxx.xxx IP-адрес 2-го сервера: 52.xxx.xxx.xxx
Я проверил соединение, и оно оказалось успешным. Удаленный запрос тоже работал нормально. Например, обновить набор таблиц номер = 0 из [IP-адрес удаленного сервера] .txtoc.dbo.xhead, где код = '1234'
Но если я использую BEGIN TRANSACTION и COMMIT TRANSACTION, такие как эта BEGIN TRANSACTION, таблица обновления устанавливает номер = 0 из [remote-server-IP] .txtoc.dbo.xhead, где code = '1234' COMMIT TRANSACTION
у меня ошибка. Поставщик OLE DB «SQLNCLI11» для связанного сервера «имя связанного сервера» вернул сообщение «Нет активных транзакций». Msg 7391, уровень 16, состояние 2, строка 2 Операция не может быть выполнена, поскольку поставщик OLE DB «SQLNCLI11» для связанного сервера «имя связанного сервера» не смог начать распределенную транзакцию.
Я пробовал много методов - Включить распределить транзакцию на обоих серверах из службы компонентов - Разрешить им работать через брандмауэр Windows - Разрешить весь трафик между ними (настройка в группе безопасности и брандмауэре Windows)
Но ни один из них не работал.
Кто-нибудь может пролить свет на это, пожалуйста?
Это старый вопрос, я наткнулся на него и только комментирую, а не приемлемый ответ:
1) Публичные IP-адреса для SQL опасны, вы должны помнить об этом. Между регионами вы можете проложить маршрут как минимум с помощью VPN. 2) Убедитесь, что DTC на удаленном сервере разрешает удаленные подключения - Start - dcomcnfg - Expand Component Services - Computers - My Computer - Distributed Transaction Coordinator - Local DTC (Properties on this) - Security - Enable Network DTC, Allow Remote Clients, Allow входящий, разрешить исходящий. 3) Если это не решит проблему, попробуйте dtcping от Microsoft для дальнейшего устранения неполадок.