我们正在运行SQL Server 2008 R2。我们的操作软件针对该数据库运行,我们将运行两个独立的操作软件实例,访问两个独立的数据库。两个数据库都在同一个SQL Server上。 在数据库中有200个表中有26个表,需要在两个单独的数据库中同步。可以从任一数据库访问这些表,并且必须在两个数据库之间同步插入/更新/删除。同步需要接近实时发生,每分钟不少于一次。
我知道我可以硬编码触发器,使用MERGE更新表格,但这意味着编写52(26 x 2)个单独的触发器,其中所有细节都经过硬编码。
我已经研究过复制,但这似乎更倾向于一个主表提供子表,而不是双向更新。
我查看过Change Tracking,但并非所有表都定义了PK。这是供应商的数据库,而不是我的数据库。我知道所有桌子都应该有PK。我不知道我可以定义PK 在桌子上。
我的另一个想法是用同义词替换其中一个表,这样两个系统实际上都在更新同一个表。我对该解决方案的关注是“打破”操作系统的可能性。
我刚刚开始研究Microsoft Sync Framework以及是否可以选择。
任何想法,建议,方向都将不胜感激。
谢谢, 戴夫
答案 0 :(得分:2)
这是一个Replication方案。 Transactional Replication可以处理从订阅服务器返回发布服务器的更新,但在这种情况下,您需要Merge Replication,这可以更好地在订阅服务器更新回发布服务器时合并冲突。
你需要PK。如果你有自动增量IDENTITY字段,那将是一个问题。存在用于对id范围进行分区的策略,例如为每个数据库中的表的版本设置不同的Identity Seed值。
如果无法对数据库进行任何更改,则此方法可能无法满足要求。复制是执行此类操作的正确方法,但它确实需要一些功能来更改结构。