我有一个 .NET 应用程序,它使用 Microsoft 同步框架在 SQL Server 2008 R2 服务器和许多 SQL Server CE 客户端之间同步数据。
初始同步成功下载了服务器上的数据,但是同步日志表明它随后会上传刚刚完成下载的未更改数据。这大大延长了初始同步时间。
从下面的 SQL CE 日志中提取(这是其中一个表的初始同步):
***** Client Provider Commit Transaction ****
Connecting to database: Data\Database.sdf
**** Client Provider Begin Transaction ****
----- Client Applying Changes from Server for Group "Staff" -----
----- Applying Deletes for Table Staff-----
Deletes Applied: 0
--- End Applying Deletes for Table Staff-----
----- Applying Upserts for Table Staff-----
----- Applying Inserts for Table Staff-----
Inserts Applied: 1
----- Applying Updates for Table Staff-----
Updates Applied: 0
--- End Applying Upserts for Table Staff---
Staff: Set ReceivedAnchor value: 1832
--- End Client Applying Changes from Server for Group "Staff" ---
这是更改被错误地上传回服务器时的日志,即当没有任何更改时标记为正在更新。
SELECT ut.* FROM (select ut0.* from [Staff] as ut0 where (ut0.__sysTrackingContext <>
@CNTX OR ut0.__sysTrackingContext IS NULL) AND ut0.__sysChangeTxBsn >= @LBSN ) as ut
LEFT OUTER JOIN (select txcs0.* from __sysTxCommitSequence as txcs0) as txcsInsert ON
ut.__sysInsertTxBsn = txcsInsert.__sysTxBsn LEFT OUTER JOIN (select txcs0.* from
__sysTxCommitSequence as txcs0) as txcsUpdate ON ut.__sysChangeTxBsn = txcsUpdate.__sysTxBsn
WHERE COALESCE(txcsUpdate.__sysTxCsn, ut.__sysChangeTxBsn) > @LCSN AND COALESCE
(txcsUpdate.__sysTxCsn, ut.__sysChangeTxBsn) <= @ECSN AND (COALESCE(txcsInsert.__sysTxCsn,
ut.__sysInsertTxBsn) <= @LCSN OR COALESCE(txcsInsert.__sysTxCsn, ut.__sysInsertTxBsn) IS NULL
OR ut.__sysInsertTxBsn IN (SELECT SyncBsn FROM __syncTransactions))
Parameter: @LCSN Value: 0
Parameter: @LBSN Value: 0
Parameter: @ECSN Value: 408
Parameter: @CNTX Value: 73c9795b-29e5-49c3-8a66-f99f667225d5
Update for row with PK: StaffId = 1
在服务器端,跟踪当前版本在初始同步期间很好,然后在某些时候增加,我假设这是由于客户端认为下载的记录是新的。
可能导致此问题的一件事是禁用跟踪以设置 SyncScope,然后启用。这是在初始同步之后完成的。
不确定我是否提供了足够有用的信息。乐于提供更多。
任何帮助,将不胜感激。谢谢。