Не удалось выполнить операцию, поскольку поставщику OLE DB SQLNCLI10 для связанного сервера DB_PROD_04 не удалось начать распределенную транзакцию.

У меня есть два сервера:

SQL_UAT_01

DB_PROD_04

Оба этих сервера имеют одинаковое имя базы данных и одинаковые таблицы:

SQL_UAT_01.Database_01.Тестовая таблица

DB_PROD_04.Database_01.Тестовая таблица

На каждой из этих двух таблиц есть триггер.

Когда триггер срабатывает, он выполняет простое ОБНОВЛЕНИЕ таблицы ДРУГОГО сервера.

Пример

Триггер срабатывает здесь:

SQL_UAT_01.Database_01.Тест

Он делает обновление здесь:

DB_PROD_04.База данных_01.Тест

И наоборот.

Я столкнулся с ошибкой, которую я не знаю, как исправить.

Опять же, ошибка вот в чем:

CallableStatementCallback; неверная грамматика SQL [{call spGetAndIncrementIndex(?)}]; вложенным исключением является com.microsoft.sqlserver.jdbc.SQLServerException: операция не может быть выполнена, поскольку поставщику OLE DB «SQLNCLI10» для связанного сервера «DB_PROD_04» не удалось начать распределенную транзакцию.

Я уже связал серверы с обеих сторон.

Кто-нибудь знает, как мне это исправить?


person RJ.    schedule 11.11.2012    source источник


Ответы (2)


Ответом было установить DT на сервер. Это функция Windows. Установил и ура!

person RJ.    schedule 19.11.2012
comment
Что такое «ДТ», пожалуйста? - person Fandango68; 23.11.2018

Если на сервере заканчиваются локальные порты, вы также получаете проблемы с MSDTC.

Это также исправлено путем исправления эфемерного насыщения портов TCP:

http://msdn.microsoft.com/en-us/library/aa560610%28v=bts.20%29.aspx

person n0mis    schedule 20.01.2015