【问题标题】:How to Sync tables between two databases in both directions - SQL Server 2008 R2如何在两个数据库之间双向同步表 - SQL Server 2008 R2
【发布时间】:2013-05-30 22:49:54
【问题描述】:

我们正在运行 SQL Server 2008 R2。我们的操作软件针对该数据库运行,我们将运行访问两个单独数据库的操作软件的两个单独实例。两个数据库都在同一个 SQL Server 上。 数据库中有 200 多个表的列表,需要在两个单独的数据库之间同步。可以从任一数据库访问这些表,并且插入/更新/删除必须在两个数据库之间同步。同步需要接近实时,每分钟不少于一次。

我知道我可以对触发器进行硬编码,使用 MERGE 来更新表,但这意味着要编写 52 (26 x 2) 个单独的触发器,将所有细节都硬编码。

我研究过 Replication,但这似乎更适合一个主表喂养一个子表,而不是双向更新。

我查看了更改跟踪,但并非所有表都定义了 PK。这是供应商的数据库,不是我的。我知道所有的桌子都应该有PK。我不知道我可以定义 PK 在桌子上。

我的另一个想法是用同义词替换其中一个表,以便两个系统实际上都在更新同一个表。我对该解决方案的担忧是“破坏”操作系统的可能性。

我刚刚开始研究 Microsoft Sync Framework 以及是否可以选择。

任何想法、建议、方向将不胜感激。

谢谢, 戴夫

【问题讨论】:

标签: sql sync


【解决方案1】:

这是Replication 场景。 Transactional Replication 可以处理从订阅服务器到发布服务器的更新,但在这种情况下,您需要Merge Replication,它更适合在订阅服务器更新回发布服务器时合并冲突。

您需要 PK。如果您有自动增量 IDENTITY 字段,那将是一个问题。有划分 id 范围的策略,例如为每个数据库中的表版本设置不同的 Identity Seed 值。

如果不能对数据库进行任何更改,这种方法可能无法满足要求。复制是做这类事情的正确方法,但它确实需要一些能力来改变结构。

【讨论】:

  • CriticalFix,我刚刚发现并开始研究合并复制。这些表有 PK,它们只是没有定义为 PK。我将与供应商交谈以了解进行这些更改的含义。合并复制工作会接近实时运行吗?我只关心性能,因为这是我们的操作系统。记录本身的数量相当少。
  • 是的,这应该几乎是实时的(几秒钟)。这就是为什么复制可能是您最好的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多