0

Я создал instead of trigger на сервере A, в котором я вызываю процедуру, которая в свою очередь вызывает другую процедуру на связанном сервере (сервер B).Вызов связанного сервера с триггера

Trigger (A) -> Процедура (A) -> Процедура (B)

Но, когда триггер выполняет он выдает следующее сообщение об ошибке:

OLE DB provider "SQLNCLI11" for linked server "xxx" returned message "The partner transaction manager has disabled its support for remote/network transactions.". Msg 7391, Level 16, State 2, Line 1 The operation could not be performed because OLE DB provider "SQLNCLI11" for linked server "xxx" was unable to begin a distributed transaction.

Когда я делаю это: Процедура (A) -> Процедура (B) работает отлично. В чем причина?

Как это исправить? Распределенный запрос отличается от запроса связанного сервера?

+0

Вы получили MSDTC настроены на обеих машинах? –

+0

@ M.Ali, но если он не был настроен, будет работать процедура «Процедура (сервер A) ->« Процедура »(сервер B)? Поскольку он работает – Sher

ответ

0

Необходимо использовать DTC при использовании связанных серверов в триггере (не рекомендуется, поскольку это не очень хорошо, и ваша транзакция будет прервана, если есть какие-либо проблемы с соединением)

или

вашей процедуры (A) может заполнить некоторую таблицу очереди, а затем некоторые задачи по расписанию могут читать эту таблицу очередей и запустить Procedure B.

или

использование репликацию или CDC (сбор данных изменений) + запланированное задание для запуска процедуры B O п удаленный сервер

или

использование Local Service Broker

+0

спасибо. 2 и 3 не будут работать, так как я должен сделать это немедленно, а работа работает по расписанию, и как proc A, так и B должны принимать параметры. Как я могу использовать шаги 1 и 4? Не удалось найти примеры. И почему эта проблема возникает даже, мы связали серверы, не работаем ли она, не настраивая некоторые другие настройки, что за кулисами? – Sher

+0

Шер, то есть по дизайну: «Распределенный запрос, который завернут в триггер, даже без явно выраженной транзакции, также рассматривается как распределенная транзакция». https://support.microsoft.com/en-us/kb/274348 – Anton

+0

Что касается (4), просмотрите https://social.msdn.microsoft.com/Forums/sqlserver/en-US/70a184f4-6c29- 441e-85de-b2bc553fee4f/how-to-run-insertupdate-statement-to-linked-server-via-sql-server-broker? Forum = sqlservicebroker – Anton