Проблема со связанными серверами SQLNCLI. «Нет активных транзакций» - PullRequest
2 голосов
/ 28 мая 2010

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

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

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

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

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

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

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

EDIT


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

Ответы [ 3 ]

4 голосов
/ 31 мая 2010

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

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

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

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

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

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

1 голос
/ 17 декабря 2010

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

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

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

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

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

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

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

0 голосов
/ 29 мая 2010

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

insert into table select * from openquery(myservername, 'exec mydatabase.dbo.mystoredproc param1, param2, param3')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...