Проблема со связанными серверами SQLNCLI. "Нет активных транзакций"

Я пытаюсь выполнить хранимую процедуру и просто вставить ее результаты во временную таблицу, и я получаю следующее сообщение:

Не удалось выполнить операцию, поскольку поставщику OLE DB "SQLNCLI" для связанного сервера "MyServerName" не удалось начать распределенную транзакцию. Поставщик OLE DB "SQLNCLI" для связанного сервера "MyServerName" вернул сообщение "Нет активных транзакций".

Мой запрос выглядит так:

INSERT INTO #TABLE
EXEC MyServerName.MyDatabase.dbo.MyStoredProcedure Param1, Param2, Param3

Точный номер столбца, имена, проблема не в результате.

MSDTC разрешен и запущен на обоих компьютерах, удаленный вызов процедур тоже.

Машины не находятся в одном домене, но я могу выполнять удаленные запросы со своей машины и получать результат. Я даже могу выполнить хранимую процедуру и посмотреть ее результаты, я просто не могу вставить ее в другую таблицу.

РЕДАКТИРОВАТЬ


О, я забыл упомянуть, хранимая процедура не запускает никакой триггер. Он только вставляет записи во временные таблицы, которые создает сам для обработки данных.

3 ответа

Решение

Что ж, после того, как я прочитал много уроков и много изучил их, я изменил всю конфигурацию, которая, по моему мнению, была необходима для его работы, но она все еще не работала.

Сегодня нам пришлось принудительно перезагрузить наш сервер разработки из-за неисправного бесперебойного режима, и когда мы загрузили сервер, угадайте, что? Оно работает!

Итак, просто для записи, я изменил некоторую конкретную конфигурацию MSDTC, добавил ее в качестве связанного сервера и разрешил RPC IN и OUT, а также изменил конфигурацию RPC на "НЕ ТРЕБУЕТСЯ АУТЕНТИФИКАЦИЯ" или что-то в этом роде.

Я помню, как читал где-то, что после того, как вы изменили эту конфигурацию, потребовалась перезагрузка, хотя Windows говорит, что она уже перезапустила службу.

Я перезагружал свой сервер как... дважды, так как я изменил его, и он все еще не работал. Но как и сегодня, после полного выключения и включения работает!

Что касается синтаксиса, я сохранил то же самое.

Вы также должны проверить разрешение имен DNS в конфигурации IP-сети.

Например, у вас есть сервер с именем server-a.mydomain.com и другой сервер с именем server-b.otherdomain.com, войдите в систему на сервере a и выполните команду "ping server-b" (без домена).

Если он отвечает "Запрос Ping не может найти хост-сервер-б. Пожалуйста, проверьте имя и попробуйте снова". это проблема.

Перейдите в Панель управления> Сетевые подключения> Щелкните правой кнопкой мыши сетевую карту> свойства> Интернет-протокол> Свойства> Дополнительно> DNS > Добавьте этот DNS-суффикс по порядку. А здесь добавьте локальный домен: mydomain.com, а затем добавьте удаленный домен: otherdomain.com. Нажимайте кнопку OK, пока не выйдете

Теперь, если вы выполните команду "ping server-b", она должна ответить примерно так:

Pinging server-b.otherdomain.com [192.168.1.2] с 32 байтами данных: ответ от 192.168.1.2: байт =32 время =12 мс TTL=64 ответ от 192.168.1.2: байт =32 время =9 мс TTL=64

Теперь попробуйте снова выполнить распределенную транзакцию.

У меня была роскошь безопасного перезапуска служб SQL Server на обеих сторонах соединения Linked Server. Мне не пришлось перезагружать машины.

Вы пробовали использовать openquery?

insert into table select * from openquery(myservername, 'exec mydatabase.dbo.mystoredproc param1, param2, param3')
Другие вопросы по тегам