SQL-транзакции репликации с триггерами, запущенными одновременно - PullRequest
1 голос
/ 28 января 2011

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

Мой вопрос ... Будут ли эти триггеры работать одновременно? Я опасаюсь, что триггер в одной таблице прервет обработку, выполняемую триггером в другой таблице

1 Ответ

1 голос
/ 28 января 2011

Триггеры будут запускаться в контексте агента репликации, применяющего обновления. Агент использует настраиваемое количество соединений :

-SubscriptionStreams [0|1|2|...64]

Количество соединений, разрешенных для каждого агента распространителя применять партии изменений параллельно подписчику при сохранении многие из транзакционных характеристики присутствуют при использовании одна нить Для SQL Server Publisher, диапазон значений от 1 до 64 поддерживается. Этот параметр поддерживается только тогда, когда издатель и Дистрибьютор работает на SQL Server 2005 или более поздние версии. Этот параметр не поддерживается или должно быть 0 для не подписчики SQL Server или одноранговые подписки.

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

...