Проблема с обновлением триггера SQL-Server с более связанного сервера - PullRequest
2 голосов
/ 13 ноября 2010

Я хотел бы обновить строки на связанном сервере.Я создал связанный сервер на своем локальном SQL-сервере с помощью инструкции .

Я могу обновить строки в Query Analyzer с помощью приведенного ниже кода.Ошибка не возвращается, и строки успешно обновляются на связанном сервере.

UPDATE  [LinkedServer].[Database].[dbo].[Table]
SET A = 'A', B = 'B'
WHERE id = 1

Но когда я создал триггер обновления для своей таблицы на локальном сервере sql, как показано ниже,

ALTER TRIGGER [TriggerLocalServerTable]
   ON  dbo.[LocalServerTable]
    FOR UPDATE
AS 

DECLARE @A varchar(4)
DECLARE @B varchar(4)
DECLARE @id int

BEGIN
 SELECT
 @A = A,
 @B = B,
 @id = id
 FROM inserted

 UPDATE  [LinkedServer].[Database].[dbo].[Table]
 SET A = @A, B = @B
 WHERE id = @id      
END

При выполнении триггера возвращает эту ошибку, как показано ниже,

Поставщик OLE DB «SQLNCLI» для связанного сервера «LinkedServer» вернул сообщение «Менеджер транзакций партнера отключил поддержку удаленных / сетевых транзакций».Сообщение 7391, уровень 16, состояние 2, процедура TriggerLocalServerTable, строка 45 Не удалось выполнить операцию, поскольку поставщику OLE DB "SQLNCLI" для связанного сервера "LinkedServer" не удалось начать распределенную транзакцию.

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

Подробнее;

  • , если определен мой связанный сервер с его удаленным IP-адресом.
  • Мой локальный сервер и связанный сервер не находятся в одном домене.
  • Параметр безопасности для связанного сервера «Сделано с использованием этого контекста безопасности»
  • Версия локального сервера - Windows Server 2003 SP2, Версия SQL-Server соответствует стандарту 2005 года.
  • Версия ОС связанного сервера - 2008 и версия SQL-Server 2008 (64-разрядная).
  • Не удалось получить доступ к удаленному серверу
    с помощью RDP,Я могу получить доступ только из порта SQL (1433).
  • Я установил для связанного сервера «RPC» и «RPC Out» значение «True» из «Опции безопасности».

Есть ли у вас какие-либо идеи для решения этой проблемы.Большое спасибо уже сейчас.

Редактировать: Я решил эту проблему.Сначала я создал триггер для обновления [TriggerLocalServerTable].Работа этого триггера заключается в вставке новых полей обновления в локальную таблицу.Эта новая таблица используется для обновления временных данных.Затем я создал задание, которое запускается каждый час для обновления файлов на LinkedServer.Это задание получает данные из временной таблицы, а затем обновляет поля таблицы LinkedServer.

С уважением, Kerberos.

Ответы [ 2 ]

1 голос
/ 13 ноября 2010

Установлен ли на Windows Server координатор распределенных транзакций? Если ваше обновление находится внутри транзакции, оно не будет работать без него. Увидеть текст ссылки

0 голосов
/ 13 июля 2011

Проблема не в SQL Server, а в драйвере ODBC.

  • Перейдите в Пуск> Настройка> Панель управления> Администрирование> Источники данных
  • Открыть вкладку DSN системы
  • Выберите драйвер, который вы использовали для Связанного сервера, и нажмите «Настроить»
  • Установите флажок «Дополнительно»> «Flags3» и «Снять флажок Отключить транзакцию»

Устранена проблема:)

...