Репликация слиянием SQL: как определить, реплицирована ли запись - PullRequest
1 голос
/ 14 июня 2009

У меня есть сценарий репликации слиянием, с SQL2005 SP3 в качестве издателя и распространителя и Windows Mobile SQLCE 3.5 SP1 в качестве подписчиков.

Фильтр репликации таков, что строки из одной из таблиц (tblJobs) поступают только на одно устройство. После того, как устройство реплицируется, оно выполняет sql, чтобы установить логический столбец IsSynced для всех загруженных им записей, а затем реплицируется снова.

Есть ли способ избежать второй репликации и установить логический столбец IsSynced во время репликации ?? (Может быть, сначала загрузите, установите флаг, затем загрузите? Или, возможно, процесс репликации на издателе / ​​распространителе установил флаг?). Я не знаю, где находятся крючки для такого рода вещей.

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

Ответы [ 2 ]

1 голос
/ 17 июня 2009

Самый простой способ узнать, реплицирована ли запись, - это проверить таблицу MSmerge_contents. Если строка существует в этой таблице, она была ранее реплицирована.

Конечно, если вы хотите убедиться, что на клиенте установлена ​​последняя версия строки, вам нужно будет покопаться в следующих таблицах для номеров поколений:

MSmerge_replinfo
MSmerge_genhistory
MSmerge_contents
MSmerge_tombstone

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

Простое пакетное обновление данных строки на подписчике приведет к репликации этого изменения на издателя.

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

0 голосов
/ 22 июня 2009

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

...