2014-12-11 6 views
0

Я выполняю синхронизацию баз данных SQL Server с помощью Microsoft Sync Framework.структура синхронизации при сценариях резервного копирования/восстановления

Мои базы данных часто восстанавливаются в более ранних версиях, и мне нужно сохранить отца (место назначения процесса синхронизации), обновить.

Теперь дело в том, что у меня есть ребенок A со столом T1 и отцом B со столом T1.

Обе таблицы T1 имеют таблицу, которая «записывает» операции, называемые T1_tracking. Во-первых, я синхронизую T1, от A до B. Затем я восстанавливаю базу данных в A до более ранней версии и снова генерирую данные, хранящиеся в T1 (с другой информацией). Следовательно, T1_tracking в A полностью отличается от T1_tracking в B, а Sync Framework говорит мне, что ему нечего делать.

Любое решение? Пожалуйста ... Спасибо! ...

ответ

0

вам необходимо запустить PerformPostRestoreFixup после восстановления базы данных и перед ее синхронизацией.

Области имеют реплик, который идентифицирует каждую реплику. если вы восстановите db, у вас будет две области с одинаковым идентификатором, что приведет к синхронизации данных.

, чтобы проиллюстрировать, скажем T1 был синхронизирован А, и А записи о том, что последний раз, когда он синхронизируется с T1 имеет метку 1000.

вы затем восстановить к более старой версии, которая, конечно, имеет меньшую временную метку значения. вы обновляете данные на восстановленном db, но отметка времени только увеличивается до 700.

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

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

, выполнив команду PerformPostRestoreFixup, вы даете восстановленной копии новый реплик. Старый репликад по-прежнему отслеживается в T1, поэтому он знает, что он уже синхронизировал существующие данные в восстановленном db. однако новые изменения будут отражены в новом репликаде, поэтому, когда он синхронизируется, T1 не знает об этом (у него нет записи о отметке времени, когда он последний раз синхронизировался с новой репликой), и, таким образом, он сможет обнаруживать изменения в синхронизации.

P.S., это упрощенная иллюстрация вашего сценария, есть нечто большее, что происходит под капотом.

Смежные вопросы