Инструкции UPDATE могут быть реплицированы как вставки или удаления пары


Обзор


При обновлении любого столбца, который является частью уникального ограничения, то SQL Server реализует обновление как «отложенное обновление», что означает, как Удалитьпару / операциивставки . Это «отложенное обновление» приводит к репликации для отправки удаленияпара / инструкцииINSERT на подписчики. Также существуют другие ситуации, которые могут вызвать отложенного обновления. Таким образом, любой бизнес-логики, реализовать в триггеры UPDATE или пользовательские хранимые процедуры на подписчике должны также быть включены в Удалить/Добавить триггеры или пользовательские хранимые процедуры.

Дополнительные сведения


Рекомендуется использовать поведение по умолчанию при репликации транзакций
Вставка, обновление и Удаление пользовательских хранимых процедур для применения изменений на подписчиках.

Подписчикам через вызов Вставить хранимые процедуры применяются инструкции INSERT , внесенные на издателе. Аналогичным образом инструкция DELETE применяется через вызов Удалить хранимые процедуры.

Тем не менее при выполнении инструкции UPDATE как «отложенное обновление» помещает пару удаленияагента чтения журнала и вызываетДОБАВЛЕНИЕ хранимой процедуры в базе данных распространителя для применения к подписчиков, а не для обновления хранятся При вызове процедуры. Например предположим, что имеется таблица публикаций, с именем TABLE1, и эти три столбца:
  • Col1 int
  • Col2 int
  • col3 varchar(30).
Только ограничение уникальности для таблицы TABLE1 определяется на col1 через ограничение первичного ключа. Предположим, что у вас есть одна запись (1,1, «Даллас»).

При выполнении этого кода:
UPDATE TABLE1 set col1 = 3 where col2 = 'Dallas'
Инструкция UPDATE реализуется SQL Server как Удалитьпару / инструкцииINSERT с момента обновления col1, который был определен уникальный индекс. Таким образом, чтения журнала помещает пару УдалитьиВставить вызов в базе данных распространителя. Это может повлиять на любой бизнес-логики, который присутствует в триггера или пользовательской хранимой процедуры на подписчике. Следует включить дополнительную бизнес-логику в удаления и вставки триггера или хранимой процедуры для обработки этой ситуации.

Если вы предпочитаете использовать один логики и требуется, чтобы все команды обновления реплицируются как Удалить/Добавить пары можно включить флаг трассировки, как описано в статье базы знаний Майкрософт:
160181 INF: флаг репликации обновления, вставки или удаления пары трассировки
Кроме того Если в публикации используется горизонтальный фильтр и обновленная строка не удовлетворяет условию фильтра, только Удалить вызов процедуры отправляется подписчикам. Обновленная строка ранее не соответствует условию фильтра, условие после обновления только Вставить вызов процедуры отправляется в процессе репликации.


В предыдущем примере, предположим, что также горизонтальный фильтр, определенные для таблицы TABLE1: где col2 = «Даллас». Если выполнить этот код:
UPDATE table1 set col2 = 'New York' where col1 = 3
агента чтения журнала только звонит Удалить хранимые процедуры должны быть применены к подписчиков, поскольку обновленная строка не соответствует критериям горизонтальный фильтр.

Теперь, если выполнить этот код:
UPDATE table1 set col2 = 'Dallas' where col1 = 3
Модуль чтения журналов создает только Вставить хранимые процедуры вызова, так как строка не соответствует ранее в условие фильтра.

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

Ссылки


Пакет обновления 1 для SQL Server 2000 или более поздней версии обратитесь к следующей статье Microsoft Knowledge Base:
302341 INF: новый флаг трассировки для обеспечения обновления одноэлементный для репликации транзакций