生成 SQL Server CE 数据库的快照与简单地复制 .SDF 文件有何不同?

Posted

技术标签:

【中文标题】生成 SQL Server CE 数据库的快照与简单地复制 .SDF 文件有何不同?【英文标题】:How does generating a snapshot of a SQL Server CE database differ from simply copying the .SDF file? 【发布时间】:2015-12-07 04:33:47 【问题描述】:

如果我想要一个为同步而配置的 SQL Server CE 数据库的副本(并且可选地已经包含一些数据),我可以使用SqlCeSyncStoreSnapshotInitialization 来制作它:

using (var conn = new SqlCeConnection(sourceConnectionString))

    var snapshot = new SqlCeSyncStoreSnapshotInitialization();
    snapshot.GenerateSnapshot(conn, "snapshot.sdf");

生成的 CE 数据库与原始数据库有何不同?如果我只是复制原始的.SDF 文件,会有什么不同吗?

【问题讨论】:

【参考方案1】:

不同之处在于 Sync Fx 中的每个副本都有一个唯一的副本 ID。当您使用生成的快照时,它会在第一次同步时重置。如果你只是简单地复制 sdf,你最终会得到具有相同副本 ID 的数据库,并且会弄乱同步。

假设您有一个副本 ID 为 1 的快照 A,您将其复制为 B,但它仍然具有副本 ID 1。 您将 A 与服务器 Z 同步,服务器 Z 会记住它与副本 id 1 同步的内容。

您尝试将 B 与 Z 同步,Z 使用它与副本 id 1 (A) 同步的元数据,并认为 B 是 A。

您现在正在为另一个数据库使用同步元数据,因为无法区分两者。

【讨论】:

感谢 JuneT。你能描述一下同步是如何搞砸的吗?顺便说一句,我正在使用 SyncOrchestrator。在回答另一个问题时,您说快照不适用于 SyncOrchestrator。这仍然正确吗?【参考方案2】:

是的,会有所不同。快照是专门准备的 SQL Server Compact 数据库,其中包含表架构、数据(可选)和更改跟踪基础结构。在客户端的第一个同步会话期间,特定于客户端的元数据会更新,并且自创建快照以来发生的任何更改都将下载到客户端数据库。

https://technet.microsoft.com/en-us/subscriptions/microsoft.synchronization.data.sqlserverce.sqlcesyncstoresnapshotinitialization(v=sql.105).aspx

【讨论】:

感谢 ErikEJ,但问题是它如何不同。我已经阅读了所有在线文档,但似乎没有任何解释。仅复制原始 .SDF 文件似乎可以正常工作,所以我想知道先制作快照有什么好处。

以上是关于生成 SQL Server CE 数据库的快照与简单地复制 .SDF 文件有何不同?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server CE:使用脚本生成数据库

SQL Server提高事务复制效率优化订阅初始化优化

从 SQL Server CE 切换到 SQL Server Express 实体问题

在 SQL Server CE 数据库中运行脚本

ASP.NET EF5 代码优先不创建 SQL Server CE 数据库

WP7 SQL Server CE 查询优化