Компонент SQL Server Service Broker для вставки данных в SQL Server 2000 - PullRequest
1 голос
/ 30 ноября 2009

У меня есть два сервера, первый с SQL Server 2005 и второй с SQL Server 2000. Я хочу вставить данные с 2005 по 2000, и я хочу сделать это несинхронно (без распределенных транзакций, потому что "сохранить транзакцию "используются).

После того, как информация вставлена ​​в таблицы сервера 2000, для обработки этой информации запускается несколько триггеров вместо.

В этом сценарии я решил использовать Service Broker. Поэтому у меня есть хранимая процедура для вставки информации с одного сервера на другой, и она отлично работает.

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

Кроме того, я знаю, что это работает, потому что когда я использую одну и ту же структуру (очереди и хранимые процедуры) для копирования из одной базы данных в другую на том же сервере SQL 2005.

Таким образом, происходит сбой только между машинами, кто-нибудь знает, почему или как получить больше информации о причине сбоя? Или как вставить данные без синхронизации (я не могу использовать агент SQL, потому что хочу вставлять информацию чаще, чем за 1 минуту).

Ответы [ 2 ]

1 голос
/ 30 ноября 2009

Обычно проблема заключается в том, что процедура SSB использует WAITFOR, а WAITFOR несовместим с распределенными транзакциями. Единственное решение - избавиться от WAITFOR (RECEIVE) и использовать вместо него обычный RECEIVE.

0 голосов
/ 30 ноября 2009

Рассмотрите возможность использования связанного сервера вместо сервисного брокера.Со связанным сервером вы можете:

insert into LinkedServer.The2000Db.dbo.The2000Table
(col1, col2, col3)
select col1, col2, col3
from The2005Table
...