Репликация слиянием SQL: как определить, была ли реплицирована запись

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

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

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

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


person Christopher Edwards    schedule 14.06.2009    source источник


Ответы (2)


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

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

MSmerge_replinfo
MSmerge_genhistory
MSmerge_contents
MSmerge_tombstone

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

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

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

person rein    schedule 16.06.2009

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

person zvolkov    schedule 22.06.2009