【问题标题】:Cleaned up change tracking, nulling table anchors not working, ideas?清理更改跟踪,使表锚无效,想法?
【发布时间】:2009-12-04 16:32:55
【问题描述】:

我有一个桌面客户端,它使用同步框架将数据库同步到服务器。我偶尔会在“清理”表格更改跟踪时遇到问题。

我做了一些研究,并在互联网上找到了一个帖子,其中提供了一些代码,可以重置桌子上的锚点,然后重新同步。这是为了使表格重新下载,从而解决问题。 (Source here)

我是这样实现代码的:

=开启同步:: =

catch (SyncException ex)
            {
                Exception ex2 = ex.InnerException;
                if (ex2.Message.Contains("cleaned up"))
                {
                    try
                    {
                        syncStats = syncAgent.Synchronize(true); 
                        //pass in true so removes anchors
                    catch (Exception anothererror)
                    {
                        //This will hit with another error equaling “Cleaned-up” on a table.
                    }
                }

= 同步代理:: =

public SyncStatistics Synchronize(bool reinit)
        {
            if (!reinit)
                return base.Synchronize();
            try
            {
                ClientSyncProvider sqlCeProvider;
                sqlCeProvider = (ClientSyncProvider)this.LocalProvider;

                foreach (SyncTable st in this.Configuration.SyncTables)
                {
                    if (st.SyncDirection != SyncDirection.Snapshot)
                    {
                        // Null anchors here
                        sqlCeProvider.SetTableReceivedAnchor(st.TableName, new SyncAnchor());
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return base.Synchronize();
        }

此代码将检测更改跟踪“清理”错误,然后调用 Synchronize(true) 并将每个表的所有锚点设为空,然后调用另一个同步。这就是成功同步的重点,不幸的是,情况并非如此,并且会遇到另一个“已清理”异常的“catch (ex anothererror){”。

任何想法我哪里出错了?

谢谢, 可汗。

【问题讨论】:

  • “问题”?这些问题是否有错误编号或错误消息?您不认为错误消息的文本在解决问题时具有某种相关性吗?
  • 同步异常消息是“SQL Server Change Tracking 已清理表客户端的跟踪信息。要从此错误中恢复,客户端必须重新初始化其本地数据库并重试”我的“问题”直接相关对此,因为它会导致同步失败,任何有能力提供帮助的人都应该知道我指的是什么。我已按照我链接的帖子的说明进行操作,希望它能解决我的“问题”,唉,事实并非如此,我只是想问是否有人能明白为什么......

标签: c# sql-server-2008 synchronization microsoft-sync-framework


【解决方案1】:

问题可能出在适配器上。您是否在 SQL 命令中检查了@sync_initialized

如果您在增量命令中不区分已初始化和未初始化的同步,您将收到此错误,因为它们总是会在 @last_recieved_anchorCHANGE_TRACKING_MIN_VALID_VERSION 之间执行检查。

我的增量插入命令遵循以下结构:

IF @sync_initialized = 0
BEGIN 
//SELECT without limitation by the changetable.
END 
ELSE
BEGIN
//SELECT limited by the changetable.
IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(N'[WorkOrder]')) > @sync_last_received_anchor RAISERROR (N'SQL Server Change Tracking has cleaned up tracking information for table ''%s''. To recover from this error, the client must reinitialize its local database and try again',16,3,N'[WorkORder]')
END

【讨论】:

  • 检查@sync_initialized 对我的情况没有帮助。使用 SqlSyncAdapterBuilder 创建的默认查询,其中包含 @sync_initialized 检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 2022-07-01
  • 1970-01-01
相关资源
最近更新 更多