1

我编写了一个客户端,它使用 SyncFramework 来协调中心辐射型架构仓储应用程序中的数据整合。当同步事务处理时,同步框架使用 @@DBTS 的值更新指定的锚表,指示上次同步处理并上传到服务器的时间。作为此方案的一部分,我想提供允许一个客户端代表其他客户端中继数据的能力。

这将用于一个客户可能无法与仓库联系的情况;它的数据库可以由有权访问仓库的客户端检索和同步(作为 DVD 或 USB 闪存介质上的数据库备份进行交换)。

该理论的问题在于,在检索快照时,如果没有在客户端数据库上设置 SentAnchor,则下次执行此过程时,会第二次复制整个数据库。

我想做的是,当我抓取客户端数据库的快照时,更新它的 SentAnchor,这样下次我抓取副本时,同步框架就会知道它的 SentAnchor ,就好像它实际上已经与服务器通信一样。

所以我的第一个冲动是简单地更新锚表,将 SentAnchor 设置为@@DBTS,但问题是同步框架以不同的格式插入相同的值,它首先通过 BinaryFormatter 运行它。

因此,相同的内在价值,不同的标头,当我尝试使用 @@DBTS 的值进行更新时,SyncFramework 错误试图将其从它预期设置的格式转换回来。

我想做的是通过 TSQL 语句设置,与同步框架使用的 @@DBTS 格式相同;我不想编写应用程序来执行单个 SQL 语句,如果这可以在已执行的语句中完成以创建备份。

就像是...

USE MyDB 
GO 
BACKUP DATABASE MyDb 
TO DISK = 'F:\01032012MyDb.bak'
    WITH FORMAT,    
    NAME = '20120103 Full Backup of MyDb' 
GO 
UPDATE Anchor SET SentAnchor = @@DBTS 
GO

基本上用任何需要的东西替换上面的@@DBTS,以便将相同的值转换为 SyncFramework 将使用的正确 fromat。

服务器是 2008R2 Express。

4

1 回答 1

3

设置 SentAnchor 的问题是您实际上可能会错过上传更改。通过设置该值,您有效地告诉 Sync Framework 它已将更改发送到 @@DBTS 的值。

我建议您改为探索使用 SqlSyncProvider。

于 2012-01-06T06:02:10.847 回答