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

适用于:Azure SQL 托管实例

本文介绍如何使用 SQL Server Management Studio (SSMS) 或 PowerShell 对 SQL Server 和 Azure SQL 托管实例之间链接的数据库进行故障转移,以便进行灾难恢复或迁移。

先决条件

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

停止工作负载

如果已准备好将数据库故障转移到辅助副本,请先在维护时段停止主副本上的任何应用程序工作负载。 这样数据库同步复制才能跟上辅助副本,以便故障转移到辅助数据库,而不会丢失数据。 在故障转移之前,确保应用程序不会向主节点提交事务。

检查复制延迟

在执行计划故障转移之前,次要副本必须与主副本保持同步。 如果次要副本远远落后于主副本,计划内故障转移可能会超时和失败。

对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 中对象资源管理器可用性组下。

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

故障转移后清理

除非选择了“故障转移成功后删除链接”,否则使用 SQL Server 2022 进行故障转移不会中断链接。 故障转移后,可以保持链接,确保可用性组和分布式可用性组保持活动状态。 无需执行其他操作。

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

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

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

强制故障转移后的状态不一致

在强制故障转移后,你可能会遇到脑裂情况,即两个副本都担当主要角色,这导致链接处于不一致状态。 如果在灾难期间切换到次要副本,然后主要副本恢复联机,则可能会发生这种情况。

若要解决此问题,请参阅修复脑裂情况

要使用该链接,请参阅以下内容:

要了解有关该链接的详细信息,请参阅以下内容:

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