假设我有两个这样的数据库:
数据库A
create table Table1 ( field1 int, field2 int, field3 int )
数据库B
create table Table1 ( field1 int, field2 int )
我们的旧应用程序使用 B 并且必须继续这样做。我们正在开发一个将使用 A 的新应用程序。确保 A:Table1 中的所有更改都复制到 B:Table1 中的最佳方法是什么?
这里有几点需要考虑:
- 旧应用程序只会在 B:Table1 中执行
选择
,不需要双向同步。 - 旧应用程序必须继续使用B。
- A:Table1中的大部分字段与B:Table1相同,但在某些情况下需要进行某种类型的数据转换。
- 性能不是大问题,因为不会有太多修改。
- 起初,只有 1-2 个表需要同步,但随着我们将更多模块迁移到新版本,将会添加更多表。
- 两个数据库来自不同的供应商。
以下是我考虑过的选项:
- 在新的应用程序中,更新两个数据库:
我不喜欢这个选项,因为它给新的应用程序数据层增加了很多复杂性,而且两个数据库之间没有事务 - 使用 A 中的触发器启动一个
应用程序
,该应用程序将复制 B
中的更改 不确定这是否是一个好的做法以及它的可靠性 - 在A中使用触发器启动
存储过程
以复制更改
某些数据转换可能太复杂而无法在存储过程中完成 - 以设定的时间间隔启动应用程序或存储过程以进行更改
不是实时的,所以我宁愿不用这个
你在这方面有什么困难?
我错过了另一个选择吗?
你做过类似的事情吗?
是否有可以完成这项工作的软件(免费或非免费)?
一如既往,感谢大家的宝贵时间和意见。
最佳答案
这里有很多选择...
- 你可以link the servers并在事务中一起应用更新。这是如果数据库不在同一台服务器上。
- 你可以使用 Service Broker向另一台服务器提供有保证的异步更新。
- Log shipping还将允许其他服务器以近乎实时的方式接收更新。
最后,您需要详细阅读每项内容并确定最适合您需求的内容。这将是可靠性和性能之间的权衡。
仅从您问题中的信息来看,Service Broker 似乎是最合适的选择。您仍然可以使用触发器来调用代理,然后异步响应。
关于sql-server - 同时更新两个不同的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359284/