0

我遇到了一个问题,在 Windows XP 32 位/SQL Server Express 2008(x86 )。它确实适用于我的其他客户端,即 Windows 7 64 位/SQL Server Express 2008 (x86):

SqlSyncStoreRestore databaseRestore = new SqlSyncStoreRestore(clientConn); databaseRestore.PerformPostRestoreFixup();

SUB QUESTION 1:它不起作用但也不会抛出任何异常,这使得故障排除变得更加困难。它是从我在我的 x64 计算机(使用 Visual Studio x86)上构建的一个小型控制台应用程序(目标 x86)执行的。我想知道 32/64 位的东西是否是罪魁祸首。有什么线索吗??但是后来,这让我想知道:

SUB QUESTION 2:“是否有相当于使用 Sync Framework 的 C# 的 PerformPostRestoreFixup() 的 SQL 查询?”

我对 Sync Framework 还很陌生,还没有完全了解 Microsoft SQL Server 数据库同步的全貌。我注意到 SyncOrchestrator/SqlSyncProvider 组合不使用内置的 SQL 更改跟踪内容。令我难以置信的惊喜!它现在让我被一个更折磨人的问题困扰着:

SUB QUESTION 3: 内置的 SQL Server Change Tracking 和 Sync Framework 是两个完全独立的平台来构建我们的同步方案吗?我希望我在英语中使用了正确的单词。换句话说,他们每个人都完全不知道对方吗?

在此先感谢您的帮助!我迷路了,哈哈!

亲切的问候,

关注

4

3 回答 3

0

好的,感谢 JuneT 将我指向 Sync Fx 2.1 SDK 的文档(在这里或者我在另一个讨论线程上阅读它?),我意识到我有一个我还没有尝试过的属性。在线阅读 Sync Fx 2.0(和其他?)在非 dbo 模式和多范围数据库方面存在问题,我想我会尝试一下。只需在我的控制台应用程序中添加以下 C# 行即可解决!

databaseRestore.ObjectSchema = "syncSchemaName";

最终,许多 JuneT 向我指出了一些好的阅读材料,因此我将其标记为答案。非常感谢!!

于 2012-11-21T16:58:59.583 回答
0

更新:为什么它没有改变值但也没有抛出异常?以下是最有可能的解释。它并没有完全回答为什么 scope_id 没有得到更新的问题,但它确实提供了额外的提示:

PerformPostRestoreFixup() 适用于数据库中的所有范围。我在数据库中定义了另一个(有效)范围,该范围已成功更改其 scope_id 值。但是,我的第二个范围(我无法更改 scope_id 的范围)存储在另一个模式中(不是默认的 .dbo)。我猜它只是没有看到范围,或者认为它无效,因此没有通知我。我试图取消配置第二个范围并收到以下错误:


在表“[scope_info]”中找不到名称为“syncScope”的有效范围。确保此范围存在并且在配置表“[scope_config]”中具有相应的有效配置。

因此,这两个问题可能具有相同的根本原因。

第二个范围确实存在,我可以使用 select 语句查看那个该死的 scope_id。现在我怎么知道配置是否有效?为什么恢复成功后会突然失效?我认为它缩小了范围,但对我来说还不够,呵呵 ;-) 我会继续发布我的发现和解决方案,以防有人大笑!开个玩笑,但有一天谁知道它可能会帮助(或混淆)谁,这取决于我猜当天的心情;-) 干杯!

于 2012-11-20T19:42:47.837 回答
0

问题 1 - 您是否尝试过启用同步 fx 跟踪?

VS Project Properties->Build Tab 下的 Platform Target 应该与安装的 Sync Fx 平台匹配。例如,x86 Platform Target 应该有 Sync Fx x86

如果 x86/x64 不匹配,通常会引发 COM 异常。

问题 2 - 您可以运行 SQL Profiler 来查看 PerformPostRestoreFixup 是什么。但我会坚持使用框架来执行此操作,因为其中涉及一些同步元数据处理。

问题 3 - SQL 更改跟踪只是更改跟踪。您仍然需要一个同步应用程序才能使用它。

SQL CT 跟踪已更改的内容并允许您查询已更改的内容。它本身并不是一个同步平台。

您需要一个同步应用程序来查询它,就像 Sync Fx 一样。或者您可以手动编写自己的 SQL 查询来查询更改。

Sync Fx 较旧的 SQLCeClientSyncProvider/DBServerSyncProvider/Sync Agent(本地数据库缓存项目项中使用的那个)可以使用 SQL CT。

于 2012-11-09T02:06:45.603 回答