我编写了一个客户端,它使用 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。