你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

故障转移链接 - Azure SQL 托管实例

适用于: Azure SQL 托管实例

本文介绍如何使用 SQL Server Management Studio (SSMS) 或 PowerShell 来故障转移 SQL Server 和 Azure SQL 托管实例之间链接的数据库。

注意

  • 目前只能在预览版中将 Azure SQL 托管实例配置为初始主要副本,并且仅从 SQL Server 2022 CU10 开始支持此功能。

先决条件

若要通过链接将数据库故障转移到次要副本,需要满足以下先决条件:

停止工作负载

若要将数据库故障转移到次要副本,请先在维护时段停止主要副本上的任何应用程序工作负载。 这使数据库复制能够赶上次要副本,让你能在不丢失数据的情况下故障转移到次要副本。 在进行故障转移之前,请确保应用程序不会向主要副本提交事务。

故障转移数据库

可以使用 SQL Server Management Studio 或 PowerShell 来故障转移链接的数据库。

使用 SSMS 中的“SQL Server 和托管实例之间的故障转移”向导,将数据库从主要副本故障转移到次要副本。

可以从主要副本或次要副本执行计划的故障转移。 若要执行强制故障转移,请连接到次要副本。

注意

  • 在进行故障转移之前,请停止源数据库上的工作负载,使复制数据库能够完全赶上进度并完成故障转移,且不会丢失数据。 如果你正在执行强制故障转移,则可能会丢失数据。
  • 若在 SQL Server 2019 及更早版本中故障转移数据库,会断开并删除两个副本之间的链接。 无法故障回复到初始主要副本。
  • 目前可在预览版中故障转移数据库,同时保留与 SQL Server 2022 的链接。

若要故障转移数据库,请执行以下步骤:

  1. 打开 SSMS 并连接到任一副本。

  2. 在“对象资源管理器”中,右键单击复制的数据库,将鼠标悬停在“Azure SQL 托管实例链接”上,并选择“故障转移...”打开“SQL Server 和托管实例之间的故障转移”向导。 如果有来自同一数据库的多个链接,请在“对象资源管理器”中的“Always On 可用性组”下展开“可用性组”,然后右键单击要用于故障转移的链接所属的分布式可用性组。 选择“故障转移...”打开“SQL Server 和托管实例之间的故障转移”向导,以获取该特定链接。

    显示故障转移的数据库上下文菜单选项的屏幕截图。

  3. 在“简介” 页上,选择“下一步”。

  4. “选择故障转移类型”页显示有关每个副本、所选数据库的角色以及支持的故障转移类型的详细信息。 可以从任何副本启动故障转移。 如果选择强制故障转移,则必须选中相应的方框,以表明你了解可能会出现数据丢失的情况。 选择下一步

    注意

    如果要迁移到 Azure SQL 托管实例,请选择“计划内故障转移”。

  5. 在“登录到 Azure 和远程实例”页上:

    1. 选择“登录”以提供凭证并登录到 Azure 帐户。
    2. 根据在上一页上选择的故障转移类型登录选项的功能会有所不同。 对于计划内故障转移,必须登录到远程实例(SQL Server 或 SQL 托管实例)。 对于强制故障转移,登录是可选的,因为支持以下两种应用场景:
      • 真正的灾难恢复:由于主实例在真正的灾难期间通常不可用,因此无法登录,用户必须立即故障转移到辅助实例,使其成为新的主实例。 中断得到解决后,链接处于不一致状态,因为两个副本现在都处于主要角色(脑裂应用场景)。
      • 灾难恢复演练:不建议使用强制故障转移执行灾难恢复演练,因为可能存在潜在的数据丢失。 但是,在演练期间,由于主实例可用,因此支持登录,并且你可以选择撤消这两个副本的角色,以避免脑裂应用场景的出现。
  6. 在“故障转移后操作”页上,SQL Server 2022 和早期版本之间的选项不同,你是否能够连接到主实例也会导致选项不同。

    • 对于 SQL Server 2022,可以选择停止副本之间的复制操作,这会在故障转移完成后删除链接和分布式可用性组。 如果要维护链接并继续执行副本之间的复制操作,请取消选中相应的方框。 如果选择删除链接,还可以选中相应的方框来删除可用性组(如果只是为了将数据库复制到 Azure 而创建,并且你不再需要该可用性组)。 选中适合你的场景的相应方框,然后选择“下一步”
    • 对于 SQL Server 2019 及更早版本,默认情况下,“删除链接”的选项已选中,并且无法取消选中该选项,这是因为故障转移到 SQL 托管实例时会停止复制操作、断开连接并删除分布式可用性组。 选中此框以表明你了解链接将被删除,然后选择“下一步”
    • (可选)如果能够在上一页上登录到 SQL Server 实例,还可以通过选中“清理”部分中的框,在强制故障转移后删除 SQL Server 实例上的可用性组。
  7. 在“摘要”页上查看操作。 或者,选择“脚本”以生成脚本,以便将来可以轻松地使用同一链接对该数据库进行故障转移。 准备好对数据库进行故障转移时,选择“完成”

  8. 完成所有步骤后,“结果”页会在已成功完成的操作旁边显示复选标记。 现在可以关闭窗口。

如果选择为 SQL Server 2022 维护链接,则次要副本将变为新的主要副本,该链接仍然处于活动状态,你可以故障回复到次要副本。

如果使用的是 SQL Server 2019 及更早版本,或者选择为 SQL Server 2022 删除链接,则链接将被删除,故障转移完成后不会再存在。 每个副本上的源数据库和目标数据库都可以执行读/写工作负荷。 它们是完全独立的。

重要

成功故障转移到 SQL 托管实例后,手动将应用程序连接字符串重新指向 SQL 托管实例 FQDN,以完成迁移或故障转移过程,并继续在 Azure 中运行。

故障转移后查看数据库

对于 SQL Server 2022,如果选择维持链接,则可以检查分布式可用性组是否存在于 SQL Server Management Studio 中对象资源管理器可用性组下。

如果在故障转移期间删除了链接,则可以使用对象资源管理器来确认分布式可用性组不再存在。 如果选择保留可用性组,则数据库仍将同步

清理可用性组

由于使用 SQL Server 2022 进行故障转移不会中断此链接,因此可以在故障转移后维持链接,这会使可用性组和分布式可用性组保持活动状态。 无需执行其他操作。

但是,删除链接只会删除分布式可用性组,并使可用性组保持活动状态。 可以决定保留可用性组,或将其删除。

如果决定删除可用性组,请替换以下值,然后运行示例 T-SQL 代码:

  • <AGName> 替换为 SQL Server 上可用性组的名称(用于创建链接)。
-- Run on SQL Server
USE MASTER
GO
DROP AVAILABILITY GROUP <AGName> 
GO

有关链接功能的详细信息,请参阅以下资源: