在单独服务器上的两个Microsft SQL Server数据库之间更新表

时间:2018-07-02 22:05:28

标签: sql-server

当前,我正在努力在单独的服务器上建立第二个SQL Server数据库(我们称为B),但它与主服务器在同一网络上(我们称为{{1} }。

出于安全性考虑,我需要基于某些表事件自动更新两者之间的特定信息,数据库B将与Web应用程序共享给该数据库,以供外部客户端使用。例如,当B中的某些表插入了新记录时,该信息也需要插入A中。而如果在A中更新了相同的表,则需要在B中对其进行更新。在两种情况下,都无需相反。

我已经读到触发器用于完成此操作,但是仅在我的情况下使用它们可能会导致一致性和可伸缩性问题,这是一个糟糕的选择。相反,我应该使用触发器将数据简单地复制到临时表中,通过SQL Server代理定期在后台运行的存储过程可以将数据复制到临时表中,如果添加了新的记录/作业,则可以传输该数据。 >

我的问题是:

  1. 最好让存储过程检查是否存在至少一条记录,然后在完成后从临时表中转移并删除该记录?

  2. 临时表是否应具有其他外部数据(例如表名,触发事件等)

  3. 如果将来需要考虑更多的表和事件,那么最好维护一个存储过程和一个临时表,在该存储过程中,存储过程可以基于外部数据,还是每个表/事件/触发器使用多个存储过程和临时表是最好的?

  4. 这是个坏主意吗,即使两者之间的表架构可能不匹配,也应该使用复制服务器或链接服务器吗?

很抱歉这么长时间。任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:0)

双向同步将是一场噩梦,但并非总是可以避免。我可以看到两个选项:

  1. 将每个服务器作为链接服务器添加到另一个服务器上,并在两个服务器上创建一个INSERT / UPDATE / DELETE触发器来来回移动更改的数据。您需要处理双方都想更新时发生的情况。您还将进入地狱。
  2. 现代编码世界中的最佳实践是更改前端,以将更改发送到队列服务(例如Service Broker或RabbitMQ),而不是直接进行数据库调用,并且让双方的侦听器同时进行数据库更新。非凡的编码工作,但更加灵活。