我们正在研究托管实例,作为 Azure VM 上的可用性组的一个进步。我们现在使用的功能之一是将日志从 AG primary 传送到非 AG 成员的实例(用于大量报告)。我发现日志重播服务 (LRS) 作为一个选项可以使用,但它看起来只是将数据库从 On Prem 数据库移动到托管实例的一种方式。另一件事是复制,但它不做整个数据库,只做表。
是否还有其他选项可以让数据库的副本从托管实例本身更新?
感谢致敬。
我们正在研究托管实例,作为 Azure VM 上的可用性组的一个进步。我们现在使用的功能之一是将日志从 AG primary 传送到非 AG 成员的实例(用于大量报告)。我发现日志重播服务 (LRS) 作为一个选项可以使用,但它看起来只是将数据库从 On Prem 数据库移动到托管实例的一种方式。另一件事是复制,但它不做整个数据库,只做表。
是否还有其他选项可以让数据库的副本从托管实例本身更新?
感谢致敬。
功能比较文档:Azure SQL 数据库和Azure SQL 托管实例针对每种类型的数据同步/数据跟踪功能说明如下:
基于以上所有内容,您的选择非常有限,并且可能需要大量工作才能进行设置。基本上你的选择如下,根据我的偏好基于实施、维护和可靠性的难度排序:
将数据库还原到 SQL Server - 如果您的 VM SQL Server 实例恰好是 SQL Server 2022,并且您可以容忍备份之间的陈旧数据,那么这可能是您实施的最简单和可靠的选择。当然,您需要滚动自己的作业(可能是利用链接服务器的 SQL 代理作业)来实际例行地进行恢复。
事务复制- 只要限制不是破坏交易的因素,并且您在兼容版本之间进行复制(通常在发布者和订阅者之间的 ~3 个版本内),这可能是下一个最简单的配置,并且通常运行良好,除非发生异常情况导致它破裂。然后通常解决这个奇怪的问题并反弹复制将使它再次工作。唯一的其他缺点是,如果您需要复制许多(数百个以上)对象,那么初始设置可能会很烦人,而且并非数据库的每个对象都能够被复制。具体来说,没有主键的表不适用于事务复制。一种解决方法是在表的顶部创建一个索引视图,该视图将定义一个唯一的聚集索引。索引视图适用于复制。当然,
DDL 和 DML 触发器——这将需要最多的工作,因为这是最需要手动完成的路线。但它也应该相当灵活和可靠。不幸的是,您会发现自己可能需要为每个表和视图至少创建一个触发器。而且这不一定能帮助您维护其他对象更改,例如存储过程。您可能希望利用链接服务器将更改推送到 VM 上的 SQL Server 实例。这肯定会做很多工作。
更改数据捕获 (CDC) - 这将比 #3 触发器的工作更少,但可能会有更多开销并且不太灵活。它不会帮助您维护大多数架构更改(例如,如果更改了视图),并且会限制允许对启用它的表进行的更改。为每个表启用它似乎很多。而且您必须滚动自己的作业来迁移每个记录的更改并将它们应用到 SQL Server 实例。触发器几乎可以使这项工作更简单,但您最好同时使用触发器而不使用此选项。
SQL Server Integration Services (SSIS) - 这可能是学习技术和初始配置方面较为复杂的选项之一。这也是我个人认为随着时间的推移越来越少使用/关注的技术,并且有一天可能会在功能上被砍掉。但老实说,这可以说是比变更数据捕获更好的途径。很难对这些进行排名。与 CDC 相比,它更灵活且开销可能更少,并且一旦您对其进行了正确的初始配置和部署,它应该可以在运行时出现最少的问题和所需的维护。
就个人而言,我会努力选择#1 或#2 选项,并且如果可能的话强烈远离#4 和#5,#3 是根据我想要保留的对象来权衡实施多少工作在两个实例之间同步以及我的数据库中存在多少这些对象。