同时更新两个不同的数据库

时间:2011-12-02 16:16:39

标签: sql-server database migration

假设我有两个类似的数据库:

DatabaseA

  

创建表 Table1 (field1 int,field2 int,field3 int)

DatabaseB

  

创建表 Table1 (field1 int,field2 int)

我们的旧应用程序使用 B ,必须继续这样做。我们正在开发一个将使用 A 的新应用程序。确保 A:Table1 中的所有更改都在 B:Table1 中复制的最佳方法是什么?


以下是需要考虑的一些事项:

  • 旧应用程序只会在 B:Table1 中执行selects,无需双向同步。
  • 旧应用必须继续使用 B
  • A:Table1 中的大多数字段与 B:Table1 相同,但在某些情况下需要进行某种类型的数据转换。
  • 性能不是一个大问题,因为不会有太多修改。
  • 首先,只有1-2个表需要同步,但是当我们将更多模块迁移到新版本时,将添加更多表。
  • 两个数据库都来自不同的供应商。

以下是我考虑的选项:

  • 在新的应用程序中,更新两个数据库:
    我不喜欢这个选项,因为它为新的应用程序数据层增加了很多复杂性,并且两个数据库之间没有事务
  • 使用 A 中的触发器启动application,以复制 B 中的更改 不确定这是不是一个好的做法,它是多么可靠
  • 使用 A 中的触发器启动stored procedure以复制更改 某些数据转换可能在存储过程中过于复杂
  • 以设定的间隔启动应用程序或存储过程以进行更改 不是实时的,所以我宁愿不使用这个

你对此有何困难?
我错过了另一种选择吗? 你有没有做过类似的事情? 是否有可以完成这项工作的软件(免费或不免费)?

一如既往,感谢大家的时间和意见。

2 个答案:

答案 0 :(得分:2)

这里有很多选择...

  • 您可以link the servers并在交易中同时应用更新。这是因为数据库在同一台服务器上
  • 您可以使用Service Broker为其他服务器提供有保证的异步更新。
  • Log shipping还允许其他服务器以近乎实时的方式接收更新。

最后,您需要阅读更多内容并确定最适合您需求的内容。这将是可靠性和性能之间的权衡。

仅从问题中的信息来看,听起来Service Broker将是最合适的。您仍然可以使用触发器来调用代理,然后代理异步响应。

答案 1 :(得分:0)

您如何看待事务复制?您可以只复制某些列,并可以编写自定义存储过程来执行插入,更新和删除操作。它也是异步的,所以你的新应用程序不应该被它所困扰。