Сервер MSDTC на сервере недоступен

Я получаю эту странную ошибку на SQL Server. И я не могу найти решение в более старых сообщениях.

У меня есть эта процедура:

create proc _upJM_SyncAll_test as begin DECLARE @SQLString nvarchar(max) set @SQLString = N' DELETE FROM OPENQUERY([LOCAL_MYSQL],''SELECT acSubject FROM _utjm_setitemprices'') where acSubject not in (select acSubject from _uvJM_SetSubj) DELETE FROM OPENQUERY([LOCAL_MYSQL],''SELECT acSubject FROM _utjm_setsubj'') where acSubject not in (select acSubject from _uvJM_SetSubj) update a set acName2 = b.acName2, acName3 = b.acName3, acAddress = b.acAddress, acPost = b.acPost, acPostName = b.acPostName, acCountry = b.acCountry, acVATCodePrefix = b.acVATCodePrefix, acCode = b.acCode, anDaysForPayment = b.anDaysForPayment from OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') a join _uvJM_SetSubj b on (a.acSubject = b.acSubject) where 1=1 and ( isnull(a.acName2,'''') <> isnull(b.acName2,'''') OR isnull(a.acName3,'''') <> isnull(b.acName3,'''') OR isnull(a.acAddress,'''') <> isnull(b.acAddress,'''') OR isnull(a.acPost,'''') <> isnull(b.acPost,'''') OR isnull(a.acPostName,'''') <> isnull(b.acPostName,'''') OR isnull(a.acCountry,'''') <> isnull(b.acCountry,'''') OR isnull(a.acVATCodePrefix,'''') <> isnull(b.acVATCodePrefix,'''') OR isnull(a.acCode,'''') <> isnull(b.acCode,'''') OR isnull(a.anDaysForPayment,'''') <> isnull(b.anDaysForPayment,'''') ) insert into OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') (acSubject, acName2, acName3, acAddress, acPost, acPostName, acCountry, acVATCodePrefix, acCode, anDaysForPayment) select b.acSubject, b.acName2, b.acName3, b.acAddress, b.acPost, b.acPostName, b.acCountry, b.acVATCodePrefix, b.acCode, b.anDaysForPayment from OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') a right join _uvJM_SetSubj b on (a.acSubject = b.acSubject) where a.acSubject is null ' EXECUTE sp_executesql @SQLString; end 

Когда я запускаю процедуру в студии управления следующим образом:

  exec dbo._upJM_SyncAll_test 

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

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

 create trigger _utrJM_SetSubj on tHE_SetSubj after insert, update, delete as begin exec dbo._upJM_SyncAll_test end 

Я получаю эту ошибку:

Msg 8501, уровень 16, состояние 3, процедура _upJM_SyncAll_test, строка 54
MSDTC на сервере «сервер» недоступен.

Процедура _upJM_SyncAll_test имеет только 39 строк …

Триггеры включены в неявную транзакцию, требуемую для операторов вставки, обновления и удаления. Поскольку вы подключаетесь к связанному серверу внутри транзакции, SQL Server продвигает его в распределенную транзакцию.

Вам нужно настроить MSDTC, вы можете открыть MMC и загрузить плагин MSDTC или использовать следующий скрипт для открытия входящих и исходящих транзакций.

https://technet.microsoft.com/en-us/library/cc731495.aspx

 REG QUERY "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccess REG QUERY "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccessTransactions REG QUERY "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccessInbound REG QUERY "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccessOutbound PAUSE REG ADD "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccess /t REG_DWORD /d 1 REG ADD "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccessTransactions /t REG_DWORD /d 1 REG ADD "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccessInbound /t REG_DWORD /d 1 REG ADD "HKLM\Software\Microsoft\MSDTC\Security" /v NetworkDtcAccessOutbound /t REG_DWORD /d 1 PAUSE net stop MSDTC net start MSDTC PAUSE 

В моем случае служба была остановлена . Решение: необходимо включить службу MSDTC

  1. пойдите в Службы . (СТАРТ> НАСТРОЙКИ> ПАНЕЛЬ УПРАВЛЕНИЯ> АДМИНИСТРАТИВНЫЕ ИНСТРУМЕНТЫ> УСЛУГИ)
  2. Найдите службу под названием « Координатор распределенных транзакций » и «ПРАВОЙ КЛИК» (на ней и выберите)> « Пуск» .
  3. сделать эту службу автоматически запущенной для решения этой проблемы на постоянной основе

Служба «Distributed Transaction Coordinator» не была запущена, поэтому начал работу и изменил тип сервиса на автоматический.

  • как предоставить доступ к учетной записи аутентификации sql для доступа к связанному серверу
  • Как я могу поддерживать ежедневные резервные копии SQL Server в App Harbor / Sequelizer
  • Подзапросы, кэшированные MySQL при использовании в предложении WHERE?
  • Динамически создайте временную таблицу, вставьте в временную таблицу, а затем выберите
  • Атрибуты измерения в окне браузера SSAS
  • Как изменить все столбцы Sql одного типа данных в другой
  • Как я могу просмотреть исходный SQL, который создал хранимую процедуру в SQL Server 2008?
  • Как включить / отключить строгий режим MySQL в localhost (xampp)?
  • Передача некоторой (любой) информации о контексте из строки подключения SSAS к базовой базе данных
  • Заказать по умолчанию по умолчанию для SQL Server Management Studio?
  • Как использовать activeerecord-sqlserver-адаптер с TinyTDS * и * интегрированное соединение безопасности в Windows * без * сохранения пароля в текстовом виде
  • Interesting Posts

    Как обновлять и синхронизировать таблицы базы данных в одно и то же время?

    SQL Server, используя LIKE для поиска столбца firstname для символов ""

    Как изменить десятичный разделитель от точки до запятой в SQL Server

    Как выбрать одну из двух записей, выбрав меньшее значение в другом поле

    Задача веб-службы SSIS возвращает файл с «& lt;», & lt; / Value & gt; персонажи

    Есть ли способ ускорить обход объектов SQL Server Management Objects существующей базы данных?

    SQL-сервер: транспонирование строк в столбцы (отношение n: m)

    Создайте файл .txt из инструкции SQL

    Как получить итоговое значение из SQL-запроса с капиллярным полем

    Нормальный vs Cloud / Azure Хостинг и роль SQL Azure против SQL Server

    обновление нескольких столбцов с использованием case-оператора в sql-сервере

    нахождение шаблонов в последовательности дат

    len () Vs datalength () в sqlserver 2005

    SQL Server 2008R2 Пользовательская функция (таблица) Производительность

    Использование Time (0) и Datetime2 (0) в SQL Server

    Давайте будем гением компьютера.