托管实例链接概述

适用于:Azure SQL 托管实例

本文概述了托管实例链接功能,该功能支持 SQL Server 和 Azure SQL 托管实例之间的准实时数据复制。 该链接提供混合灵活性和数据库移动性,因为它解锁许多方案,例如缩放只读工作负载、将分析和报告卸载到 Azure 以及迁移到 Azure。 此外,使用 SQL Server 2022 时,可通过该链接进行联机灾难恢复,故障回复到 SQL Server(目前为预览版),以及配置从 SQL 托管实例到 SQL Server 2022(也为预览版)的链接。

若要开始,请查阅为链接准备好环境

概述

托管实例链接使用分布式可用性组以安全可靠的方式扩展数据资产,近实时地将数据从托管在任意位置的 SQL Server 复制到 Azure SQL 托管实例,或将数据从 Azure SQL 托管实例复制到托管在任意位置的 SQL Server 2022。

链接功能支持单节点和多节点 SQL Server 示例,无论是否带有现有可用性组。 通过链接,你可以利用 Azure 的优势,而无需将 SQL Server 数据资产迁移到云。

虽然该链接支持每个链接复制一个数据库,但可以通过配置多个链接将多个数据库从单个 SQL Server 实例复制到一个或多个 SQL 托管实例,或者将同一个数据库复制到多个 SQL 托管实例 - 每个数据库-托管示例对一个链接。

链接功能当前提供以下功能:

  • 单向复制(SQL Server 版本 2016 和 2019):使用链接功能将数据从 SQL Server 实例单向复制到 Azure SQL 托管实例。 尽管在发生灾难时可以手动故障转移到托管实例,但这样做会中断链接,并且不支持故障回复。
  • 灾难恢复 (SQL Server 2022):使用链接功能在 SQL Server 2022 和 SQL 托管实例之间复制数据,在灾难期间手动故障转移到辅助实例,并在灾难缓解后故障回复到主实例。 SQL Server 或 SQL 托管实例可以是初始主实例。 此功能目前以预览版提供。

只要你需要,你可以一直运行该链接,一次可以运行几个月甚至数年。 对于你的新式化之旅,如果或当你准备迁移到 Azure 时,链接可以大幅改善迁移体验。 与可用的所有其他迁移选项相比,通过链接进行迁移时的停机时间最短,并实现向 SQL 托管实例的真正的联机迁移。

通过链接功能在 SQL Server 和 Azure SQL 托管实例之间复制数据库的做法可用于多种场景,例如:

  • 灾难恢复
  • 在不迁移到云的情况下使用 Azure 服务
  • 将只读工作负载卸载到 Azure
  • 迁移到 Azure
  • 在本地复制数据

说明主要托管实例链接方案的示意图。

版本可支持性

Azure SQL 托管实例的常规用途和业务关键服务层级均支持托管实例链接。 链接功能适用于 Enterprise、Developer 和 Standard 版的 SQL Server。

下表列出了链接功能的功能和受支持的最低 SQL Server 版本:

初始主数据库版本 操作系统 (OS) 单向复制 灾难恢复选项 服务更新要求
Azure SQL 托管实例 Windows Server 和 Linux 预览 双向预览版 - SQL Server 2022 CU10 (KB5031778):创建从 Azure SQL 托管实例到 SQL Server 2022 的链接 1
- SQL Server 2022 CU13 (KB5036432):使用 Transact-SQL 对链接进行故障转移
- 仅配置了 SQL Server 2022 更新策略的实例,支持配置从 Azure SQL 托管实例到 SQL Server 2022 的链接。
SQL Server 2022 (16.x) Windows Server 和 Linux 正式发布 双向
脱机(正式发布)
联机(预览版)
SQL Server 2022 RTM
SQL Server 2019 (15.x) 仅限 Windows Server 正式发布 仅从 SQL Server 到 SQL MI SQL Server 2019 CU20 (KB5024276)
SQL Server 2017 (14.x) 不可用 不可用 空值 目前 SQL Server 2017 不支持此功能。
SQL Server 2016 (13.x) 仅限 Windows Server 正式发布 仅从 SQL Server 到 SQL MI 最新的 SQL Server 2016 SP3 版本和匹配的 SQL Server 2016 Azure Connect 包版本
SQL Server 2014 (12.x) 及以下版本 空值 不可用 空值 不支持 SQL Server 2016 之前的版本。

1 从 SQL Server 2022 的 RTM 版本开始,支持在使用 SQL Server 2022 作为初始主实例的情况下创建链接,而仅从 SQL Server 2022 CU10 开始,支持在使用 Azure SQL 托管实例作为初始主实例的情况下创建链接。 如果从初始主 SQL 托管实例创建链接,则在链接处于活动状态时不支持将 SQL Server 降级至低于 CU10 版本,因为沿任一方向进行故障转移后都可能会导致问题出现。

不支持 SQL Server 2016 之前的 SQL Server 版本 (SQL Server 2008 - 2014),因为链接功能依赖于在 SQL Server 2016 中引入的分布式可用性组技术。

除了受支持的 SQL Server 版本,你还需要:

  • 在 SQL Server 实例和托管实例之间建立网络连接。 如果 SQL Server 在本地运行,请使用 VPN 链路或 Azure ExpressRoute。 如果 SQL Server 在 Azure 虚拟机 (VM) 上运行,请将 VM 部署到托管实例所在的虚拟网络,或使用虚拟网络对等互连来连接两个单独的子网。
  • 预配到任何服务层级的 Azure SQL 托管实例部署。

还需要使用以下工具:

工具 备注
SSMS 20.2 或更高版本 SQL Server Management Studio (SSMS) 是使用托管实例链接的最简单的方法,因为它提供可自动设置链接的向导。
Az.SQL 3.9.0 或更高版本 手动配置步骤需要使用 PowerShell 模块。

SQL 托管实例链接功能背后的底层技术可在 SQL Server 和 Azure SQL 托管实例之间创建分布式可用性组。 该解决方案支持有或没有现有可用性组的单节点系统,或具有现有可用性组的多节点系统。

显示 SQL 托管实例的链接功能如何使用分布式可用性组技术工作的关系图。

在本地网络和 Azure 之间使用专用连接,例如 VPN 或 Azure ExpressRoute。 如果 SQL Server 托管在 Azure VM 上,可以在 VM 和托管实例(例如虚拟网络对等互连)之间使用内部 Azure 主干。 这两个系统之间的信任是使用基于证书的身份验证建立的,其中 SQL Server 和 SQL 托管实例互换其各自证书的公钥。

Azure SQL 托管实例支持从相同或各种 SQL Server 源到单个 Azure SQL 托管实例的多个链接,这仅受托管实例上可同时托管的数据库数量的限制,常规用途和业务关键服务层级多达 100 个链接。 同样,单个 SQL Server 实例甚至可以与不同 Azure 区域中的多个托管实例建立多个并行数据库同步链接,数据库和托管实例之间为一对一的关系。

为了帮助设置初始环境,请参阅指南以准备 SQL Server 环境,以便将链接功能用于 SQL 托管实例:

确保满足初始环境要求后,可以使用 SQL Server Management Studio (SSMS) 中的自动向导创建链接,也可以选择使用脚本手动设置链接:

创建链接后,遵循有关维护链接的最佳做法:

灾难恢复

使用托管实例链接可进行灾难恢复,在发生灾难时,可以手动将工作负载从主数据库故障转移到辅助数据库。 若要开始使用,请查看通过托管实例链接进行灾难恢复

使用 SQL Server 2016 和 SQL Server 2019 时,主数据库始终是 SQL Server,并且故障转移至辅助托管实例的过程是单向的。 不支持故障回复到 SQL Server。 但是,可以使用事务复制导出 bacpac 等数据移动选项将数据恢复到 SQL Server。

使用 SQL Server 2022 时,SQL Server 或 SQL 托管实例可以是主数据库,并且可以从 SQL Server 或 SQL 托管实例建立链接。 可以在主要数据库和辅助数据库之间故障回复工作负载,从而实现真正的双向灾难恢复。

故障回复到 SQL Server 时,可以选择以下故障回复方式:

  • 直接使用托管实例链接进行联机故障回复。 目前可在预览版中使用此选项。
  • 通过备份 SQL 托管实例中的数据库并将其还原到 SQL Server 2022 实例脱机进行故障回复。 此选项已正式发布。

显示灾难恢复方案的示意图。

使用 Azure 服务

通过链接功能和 SQL Server 数据来利用 Azure 服务,而无需迁移到云。 示例包括报告、分析、备份、机器学习和其他将数据发送到 Azure 的作业。

将工作负载卸载到 Azure

你还可以使用链接功能将工作负载卸载到 Azure。 例如,应用程序可以将 SQL Server 用于读/写工作负载,同时将只读工作负载卸载到全球任一 Azure 区域的 SQL 托管实例部署。 建立链接后,SQL Server 上的主数据库可进行读/写访问,而复制到 Azure 托管实例的数据只能进行读取访问。 这种布置将支持各种方案,其中,托管实例上的复制数据库可用于读取扩展并将只读工作负载卸载到 Azure。 同时,托管实例还可以托管独立的读/写数据库。 这允许将复制的数据库复制到同一托管实例上的另一个读/写数据库,以进一步处理数据。

链接是数据库范围的(每个数据库一个链接),允许合并和拆分 Azure 中的工作负载。 例如,可以将数据库从多个 SQL Server 实例复制到 Azure 中的单个 SQL 托管实例部署(合并),也可以通过数据库与托管实例之间的一对一关系将数据库将数据库从单个 SQL Server 实例复制到多个托管实例,再到任何 Azure 区域(拆分)。 后面的选项提供了一种高效的方法,允许你将工作负载快速部署到更接近全球各地客户的位置,你可以将其用作只读副本。

迁移到 Azure

链接功能还有助于从 SQL Server 迁移到 SQL 托管实例,可实现:

  • 与目前可用的所有其他解决方案相比,性能最高、停机时间最短的迁移。
  • 到任何服务层级中的 SQL 托管实例的真正联机迁移。

由于链接功能可实现停机时间最短的迁移,因此,你可以在保持主要工作负载联机的同时迁移到托管实例。 尽管目前可以使用其他解决方案实现联机迁移到常规用途服务层级,但链接功能是唯一允许真正联机迁移到业务关键层的解决方案。

在本地复制数据

使用 SQL Server 2022 时,可以建立从 SQL 托管实例到 SQL Server 的链接,从而解锁其他场景,例如在 Azure 外部创建准实时数据库副本、测试业务连续性计划、满足合规性要求等。 建立从 SQL 托管实例 到 SQL Server 2022 的链接功能目前以预览版提供。

自动备份

将数据库复制到 Azure SQL 托管实例后,它们会自动备份到 Azure 存储。 你可以降低本地管理和操作成本,同时在已复制数据库上获得可靠的 Azure 备份功能。 然后,可以对已复制数据库执行到同一区域中任何 SQL 托管实例部署的时间点还原,就像执行任何其他自动备份一样。

无许可证被动 DR 副本

如果为没有任何工作负载的仅辅助被动灾难恢复 SQL 托管实例激活混合故障转移权益,则可以节省 vCore 许可成本。

若要开始使用,请查看无需支付许可费用的被动副本

成本收益

如果指定一个托管实例副本仅用于灾难恢复,Azure 不会针对辅助实例使用的 vCore 向你收取 SQL Server 许可费用。 请注意,实例按小时计费,如果在一小时内更新许可权益,则仍可能需要支付一小时的许可费用。

对于即用即付计费模型及 Azure 混合权益,其权益体现方式不同。 对于即用即付计费模型,在发票中 vCore 将获得计费折扣。 如果将 Azure 混合权益用于被动副本,则次要副本所使用的 vCore 数量将返回至许可池。

例如,作为即用即付客户,如果有 16 个 vCore 分配给辅助实例,那么当你将辅助实例指定用于混合故障转移时,发票中会显示对 16 个 vCore 的折扣。

在另一个示例中,如果你有 16 个 Azure 混合权益许可证,并且辅助 SQL 托管实例使用 8 个 vCore,则在将辅助实例指定用于混合故障转移后,8 个 vCore 将返回许可证池,以用于其他 Azure SQL 部署。

有关混合故障转移权利权益的精确条款和条件,请在“SQL Server - 故障转移权利”部分中在线查看 SQL Server 许可条款。

限制

使用链接时,请考虑以下限制。

版本可支持性限制包括:

  • 无法使用 Windows 10 和 11 客户端来托管 SQL Server 实例,因为无法启用链接所需的 Always On 可用性组功能。 SQL Server 实例必须托管在 Windows Server 2012 或更高版本上。
  • 链接功能不支持 SQL Server 版本 2008 到 2014,因为这些版本的 SQL 引擎不具备对链接所需的分布式可用性组的内置支持。 升级到较新版本的 SQL Server 以使用链接功能。
  • 配置了 SQL Server 2022 更新策略的实例支持 SQL 托管实例到 SQL Server 2022 的数据复制和故障转移:
    • 建立从 SQL 托管实例到 SQL Server 的链接。
    • 从 SQL 托管实例故障转移到 SQL Server 2022。

数据复制限制包括:

  • 只能复制用户数据库。 不支持复制系统数据库。
  • 解决方案不会将服务器级对象、代理作业或用户登录名从 SQL Server 复制到 SQL 托管实例。
  • 对于 SQL Server 版本 2016 和 2019,将用户数据库从 SQL Server 实例复制到 SQL 托管实例部署是单向操作。 无法将用户数据库从 SQL 托管实例部署复制回 SQL Server 实例。 故障回复到 SQL Server 实例的双向复制仅适用于 SQL Server 2022。
  • 对于已链接的 SQL 托管实例数据库,不支持在数据库上配置从 SQL 托管实例到 SQL Server 的链接。

配置限制包括:

  • 如果一台服务器上有多个 SQL Server 实例,则可为每个实例配置一个链接,但必须将每个实例配置为使用单独的数据库镜像终结点,且每个实例都有一个专用端口。 只有默认实例应将端口 5022 用于数据库镜像终结点。
  • 对于每个托管实例链接,只能将一个数据库放入单个可用性组。 但是,可以通过建立多个链接在单个 SQL Server 实例中复制多个数据库。
  • 单个托管实例最多支持来自多个 SQL Server 实例的 100 个链接。
  • 托管实例链接可以复制任何大小的数据库,前提是该数据库适合目标 SQL 托管实例部署的所选存储大小。
  • SQL Server 与 SQL 托管实例之间的托管实例链接身份验证基于证书,只能通过证书交换实现此目的。 不支持使用 Windows 身份验证在 SQL Server 实例和托管实例之间建立链接。
  • 仅支持通过 VNet-local 终结点来建立与 SQL 托管实例的链接。
  • 不能使用公共终结点或专用终结点建立与托管实例的链接。
  • 无法复制具有多个日志文件的数据库,因为 SQL 托管实例不支持多个日志文件。

功能限制包括:

  • 使用链接功能的实例不支持故障转移组。 无法在属于故障转移组的托管实例上建立链接,相反,无法在已建立链接的实例上配置故障转移组。
  • 如果对 SQL Server 实例上复制的数据库使用变更数据捕获 (CDC)、日志传送或服务代理,当数据库迁移到 SQL 托管实例部署时以及在故障转移到 Azure 期间,客户端需要使用当前全局主要副本的实例名称进行连接。 这些设置应手动重新配置。
  • 如果在迁移方案中将事务复制与 SQL Server 实例上的数据库一起使用,则故障转移到 Azure 期间,SQL 托管实例部署上的事务复制将失败,并且应手动重新配置。
  • 如果对从 SQL Server 实例复制的数据库使用分布式事务,并且执行的是迁移方案,则在切换到云时,将不会转移分布式事务处理协调器功能。 迁移的数据库无法参与 SQL Server 实例中的分布式事务,因为 SQL 托管实例部署目前不支持 SQL Server 中的分布式事务。 作为参考,SQL 托管实例目前仅支持其他托管实例之间的分布式事务。 有关详细信息,请参阅跨云数据库的分布式事务
  • 如果使用透明数据加密 (TDE) 来加密 SQL Server 数据库,则需要导出来自 SQL Server 的数据库加密密钥并将其上传到 Azure Key Vault,并且还需要在创建链接之前在 SQL 托管实例上配置 BYOK TDE 选项。
  • 使用服务托管的 TDE 密钥加密的 SQL 托管实例数据库无法链接到 SQL Server。 只有在数据库是使用客户管理的密钥加密的,并且目标服务器可以访问用于加密该数据库的相同密钥时,才能将加密的数据库链接到 SQL Server。 有关详细信息,请参阅使用 Azure Key Vault 设置 SQL Server TDE
  • 如果托管实例不支持在 SQL Server 实例上使用的功能,则无法在 SQL Server 与 SQL 托管实例之间建立链接。 例如:
    • 无法复制包含文件表和文件流的数据库,因为 SQL 托管实例不支持文件表或文件流。
    • 使用内存中 OLTP (Hekaton) 的数据库只能复制到业务关键服务层级中的 SQL 托管实例,因为常规用途服务层级不支持内存中 OLTP。 SQL 托管实例不支持具有多个内存中 OLTP 文件的数据库,并且这些数据库无法复制。

尝试将不受支持的功能添加到以下产品的复制数据库:

  • SQL Server 2019 和 2022,失败并出现错误。
  • SQL Server 2016,导致链接中断,然后需要删除并重新创建该链接。

有关 SQL Server 和 SQL 托管实例之间差异的完整列表,请参阅 SQL Server 和 Azure SQL 托管实例之间的 T-SQL 差异

对于其他复制和迁移方案,请考虑: