你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
applies to:Azure SQL 托管实例
本文介绍如何使用 SQL Server Management Studio(SSMS)或 PowerShell 进行SQL Server与Azure SQL托管实例之间的数据库链接故障转移,以便实现灾难恢复或迁移。
先决条件
若要通过链接将数据库故障转移到次要副本,需要满足以下先决条件:
- 活动的 Azure 订阅。 如果没有帐户,请创建一个免费帐户。
- 支持的 SQL Server 版本 已安装所需的服务更新。
- 主副本和辅助副本之间配置的链接。
- 可以使用 Transact-SQL 从 SQL Server 2022 CU13(KB5036432) 开始对链接进行切换。
停止工作负载
若要将数据库故障转移到次要副本,请先在维护时段停止主要副本上的任何应用程序工作负载。 这使数据库复制能够在辅助数据库上同步,以便你能够在不丢失数据的情况下故障转移到辅助数据库。 在进行故障转移之前,请确保应用程序不会向主节点提交事务。
检查复制延迟
在执行计划故障转移之前,次要副本必须与主副本保持同步。 如果次要副本远远落后于主副本,计划内故障转移可能会超时和失败。
对SQL Server和SQL 托管实例使用以下 T-SQL 查询监视副本之间的复制延迟:
-- Execute on SQL Server and SQL Managed Instance
USE master
DECLARE @link_name varchar(max) = '<DAGname>'
SELECT
ag.name [Link name],
ars1.role_desc [Link role],
ars2.connected_state_desc [Link connected state],
ars2.synchronization_health_desc [Link sync health],
drs.secondary_lag_seconds [Link replication latency (seconds)]
FROM
sys.availability_groups ag
JOIN sys.dm_hadr_availability_replica_states ars1
ON ag.group_id = ars1.group_id
JOIN sys.dm_hadr_availability_replica_states ars2
ON ag.group_id = ars2.group_id
JOIN sys.dm_hadr_database_replica_states drs
ON ars2.replica_id = drs.replica_id
WHERE
ag.is_distributed = 1 AND ag.name = @link_name AND ars1.is_local = 1 AND ars2.is_local = 0
GO
如果复制滞后时间较高,请等待辅助副本赶上主副本。 如果滞后时间持续,可能需要执行其他故障排除步骤,例如改善两个实例之间的链接网络吞吐量,或增加辅助副本上的资源容量。
故障转移数据库
可以使用 Transact-SQL(T-SQL)、SQL Server Management Studio 或 PowerShell 对链接数据库进行故障切换。
您可以从SQL Server 2022 CU13(KB5036432)开始使用 Transact-SQL 进行链接故障转移。
若要对连接执行计划性故障转移,请在主要副本上使用以下 T-SQL 命令:
ALTER AVAILABILITY GROUP [<DAGname>] FAILOVER
若要执行强制故障转移,请在次要副本上使用以下 T-SQL 命令:
ALTER AVAILABILITY GROUP [<DAGname>] FORCE_FAILOVER_ALLOW_DATA_LOSS
重要
执行计划故障转移后,复制模式设置为异步。
故障转移多个数据库
如果计划从同一服务器上的实例故障转移多个数据库,为实现最佳性能和可预测性,请每次在每个实例上故障转移 8 个数据库。 例如,如果每个实例有 10 个实例,每个实例有 32 个链接数据库,则每次从每个实例故障转移 8 个数据库,并重复此过程,直到所有数据库都故障转移。
故障转移后查看数据库
对于 SQL Server 2022,如果选择维护链接,则可以在 SQL Server Management Studio 中的 Availability Groups 下检查分布式可用性组是否存在对象资源管理器。
如果在故障转移期间删除了链接,则可以使用 对象资源管理器 确认分布式可用性组不再存在。 如果选择保留可用性组,则数据库仍将同步。
故障转移后清理
除非选择了“成功故障转移后移除链接”,否则在 SQL Server 2022 中进行故障转移不会中断该链接。 可以在故障转移后维持连接,这会使可用性组和分布式可用性组保持活跃状态。 无需执行其他操作。
删除链接只会删除分布式可用性组,并使可用性组保持活动状态。 可以决定保留可用性组,或将其删除。
如果决定删除可用性组,请替换以下值,然后运行示例 T-SQL 代码:
-
<AGName>,SQL Server上的可用性组的名称(用于创建链接)。
-- Run on SQL Server
USE MASTER
GO
DROP AVAILABILITY GROUP <AGName>
GO
强制故障转移后的状态不一致
强制故障转移后,可能会遇到裂脑情况,其中两个副本都处于主角色,导致链接处于不一致状态。 如果在灾难期间故障转移到次要副本,然后主要副本重新联机,则可能会发生这种情况。
若要解决此问题,请参阅修复脑裂情况。
相关内容
要使用该链接,请参阅以下内容:
- 为 托管实例 链接准备环境
- 使用 SSMS 配置 SQL Server 与 SQL 托管实例之间的连接
- 使用脚本在 SQL Server 和 SQL 托管实例之间配置链接
- 使用链接进行迁移
- 有关维护链接的最佳做法
- 排查链接问题
要了解有关该链接的详细信息,请参阅以下内容:
- 托管实例链接概述
- 使用 托管实例 链接进行灾难恢复
对于其他复制和迁移方案,请考虑: