sql-server - 在不同服务器上的两个 Microsft SQL Server 数据库之间更新表
问题描述
目前,我正致力于在B
单独的服务器上设置第二个 SQL Server 数据库(我们将调用 ),但与主服务器位于同一网络(我们将调用A
)。
出于安全目的,我需要根据某些表事件自动更新两者之间的特定信息,数据库 B 将与 Web 应用程序共享这些信息以供外部客户端使用。例如,当 B 中的某些表插入了新记录时,该信息也需要插入到 A 中;而如果这些相同的表在 A 中更新,则它们需要在 B 中更新。在这两种情况下,永远不要反过来。
我已经读过触发器用于完成此操作,但仅在我的情况下使用它们可能会导致一致性和可伸缩性问题,这是一个糟糕的选择。相反,我应该使用触发器将数据简单地复制到临时表中,如果添加了新记录/作业,存储过程通过 SQL Server 代理在后台定期运行,可以传输该数据。
我的问题是:
最好让存储过程检查是否存在至少一条记录,然后在完成后从临时表中传输并删除该记录?
临时表是否有其他外部数据(如表名、触发事件等)
如果将来需要考虑更多的表和事件,维护一个存储过程和一个临时表是一个好主意,其中存储过程可以根据外部数据确定将数据传输到哪里,或者多个每个表/事件/触发器的存储过程和临时表最好?
这是一个坏主意,是否应该使用复制或链接服务器,即使两者之间的表模式可能不匹配?
对不起,啰嗦了这么多。非常感谢任何和所有帮助!
解决方案
双向同步将是一场噩梦,并不是说您总是可以避免它。我可以看到两个选项:
- 将每个服务器作为链接服务器添加到另一个服务器上,并在两者上创建一个 INSERT/UPDATE/DELETE 触发器以来回移动更改的数据。您需要处理双方都想更新时发生的情况。你也会在地狱里。
- 现代编码世界中的最佳实践是改变您的前端以将更改发送到队列服务(如 Service Broker 或 RabbitMQ),而不是直接调用数据库,并让双方的侦听器同时进行数据库更新。不平凡的编码工作,但更灵活。
推荐阅读
- c# - 如何使用 EF Core 在 .NET Core 3.1(无 LINQ)中为 CRUD 操作创建自定义扩展方法?
- workflow - 工作流 - 获取由字段创建的事务
- python - 使用 Colorama 在 ubuntu 终端中显示 Ansii 文本颜色
- python - 如何检查 QlistWidget 中的项目并在 python pyqt5 中的选定项目上运行函数
- javascript - 如何检测 iframe 是否接受创建的 blob url 作为 iframe 的 src
- javascript - 如何将此对象转换为数组?
- oracle - 从游标中获取行数据 - PL/SQL
- angular - routerLink 和同一个 ion-item 中的单独功能
- firebase - 用于获取上传到 Firebase 托管的文件列表的 API
- django - DRF、modelSerializer相关的嵌套表