Есть ли способ вручную обновить таблицы отслеживания, чтобы запустить синхронизацию? - PullRequest
0 голосов
/ 28 февраля 2012

Я использую провайдеров Microsoft для совместной работы. Оба конца синхронизации будут использовать SQL Express для начала. При подготовке база данных содержит таблицу «_tracking» для каждой «реальной» таблицы в базе данных. Моя база данных довольно большая, и я не хочу передавать все это через MSF при первой синхронизации. Есть ли способ использовать какой-то другой метод для «запуска» синхронизации, когда известно, что обе стороны содержат одни и те же данные? В моем тестировании, когда обе базы данных содержат идентичный контент, похоже, что он загружает всю область, обрабатывает весь пакет «изменений», а затем выгружает всю область обратно на сервер, который затем снова обрабатывает весь набор данных. Есть ли способ обновить таблицы _tracking (надеюсь, только с одной стороны), чтобы система знала, что содержимое базы данных одинаково?

Дополнительная информация ( редактировать ):

Из проверки содержимого таблиц отслеживания после выполнения начальной синхронизации похоже, что поля scope_update_peer_timestamp и local_create_peer_timestamp в каждой таблице _tracking необходимо обновить с обеих сторон. Кроме того, update_scope_local_id, scope_update_peer_key и last_change_datetime должны быть установлены на одной из двух сторон.

Поле last_change_datetime является датой-временем и довольно очевидно. Кажется, что два поля _timestamp используют @@DBTS и, таким образом, являются bigints, которые содержат эквивалент редактируемого столбца метки времени.

Это все еще оставляет кучу неизвестных:

  • Отслеживает ли MSF, из какого источника выводится содержимое столбцов меток времени?
  • Какой узел (локальный или удаленный) управляет содержимым полей _timestamp?
  • Какая логика управляет содержимым полей update_scope_local_id и scope_update_peer_key?

Дополнительная информация об окружающей среде ( edit ):

У меня SQL Express / Std с обеих сторон. Со стороны сервера в конечном итоге будет содержаться информация для нескольких клиентов (с использованием многопользовательского режима), поэтому резервные копии будут бесполезны, поскольку сервер будет содержать информацию для нескольких клиентов.

1 Ответ

1 голос
/ 29 февраля 2012

как вы инициализируете свои базы данных? Вы готовите базы данных, которые уже содержат один и тот же набор данных?

лучший способ инициализировать другие реплики - это использовать метод GenerateSnapshot в SqlCeSyncProvider, который создает файл SDF для инициализации других реплик или для резервного копирования базы данных (не-SDF, базы данных SQL Server / Express), восстановления и запустите PerformPostRestoreFixup перед синхронизацией.

...