我已经编写了一个客户端,它使用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使用的正确值中获取所需的任何东西。
服务器是2008R2特快。
发布于 2012-01-06 06:02:10
设置SentAnchor的问题是,您可能实际上错过了上传更改。通过设置值,您已经有效地告诉Sync Framework,它已经发送到@@DBTS的值为止的更改。
我建议您探索使用SqlSyncProvider代替。
https://stackoverflow.com/questions/8718196
复制相似问题