我正在使用Microsoft Sync Framework"协作"供应商。同步的两端将使用SQL Express开始。在配置时,数据库包含" _tracking"表格为每个"真实"数据库中的表。我的数据库相当大,我不想在第一次同步时通过MSF传输整个数据库。有没有办法使用其他方法来快速启动"当双方都知道包含相同数据时的同步?在我的测试中,当两个数据库包含相同的内容时,看起来它会下载整个范围,在整批"更改"中进行搅拌,然后将整个范围上传回服务器,然后服务器整个整个数据集再次。有没有办法更新_tracking表(希望只在一侧)让系统知道数据库内容是否相同?
更多信息(修改):
在执行初始同步后检查跟踪表的内容时,看起来每个_tracking表中的scope_update_peer_timestamp
和local_create_peer_timestamp
字段都需要在两侧进行更新。此外,update_scope_local_id
,scope_update_peer_key
和last_change_datetime
需要在双方中的一方设置。
last_change_datetime
字段是日期时间,并且相当不言自明。
这两个_timestamp
字段似乎使用@@DBTS
,因此是包含等效于可编辑时间戳列的bigints。
这仍然留下了许多未知数:
update_scope_local_id
和scope_update_peer_key
字段的内容?有关环境的更多信息(修改):
我双方都有SQL Express / Std。服务器端最终将包含多个客户端的信息(使用多租户),因此备份将没有用,因为服务器将包含多个客户端的信息。
答案 0 :(得分:1)
您是如何初始化数据库的?您是否配置了包含相同数据集的数据库?
初始化其他副本的最佳方法是在SqlCeSyncProvider上使用GenerateSnapshot方法创建SDF文件以初始化其他副本或备份数据库(非SDF,SQL Server / Express数据库),还原并在执行同步之前运行PerformPostRestoreFixup。