你当前正在访问 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 Server 版本,安装了所需的服务更新。
- 主副本和辅助副本之间配置的链接。
- 可以从 SQL Server 2022 CU13 (KB5036432) 开始,使用 Transact-SQL(目前为预览版)对链接进行故障转移。
停止工作负载
若要将数据库故障转移到次要副本,请先在维护时段停止主要副本上的任何应用程序工作负载。 这使数据库复制能够赶上次要副本,让你能在不丢失数据的情况下故障转移到次要副本。 在进行故障转移之前,请确保应用程序不会向主要副本提交事务。
故障转移数据库
可以使用 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
故障转移后查看数据库
对于 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
强制故障转移后的状态不一致
强制故障转移后,可能会遇到裂脑情况,其中两个副本都处于主角色,导致链接处于不一致状态。 如果在灾难期间故障转移到次要副本,然后主要副本重新联机,则可能会发生这种情况。
首先,确认你处于裂脑应用场景中。 可以使用 SQL Server Management Studio (SSMS) 或 Transact-SQL (T-SQL) 来执行此操作。
在 SSMS 中连接到 SQL Server 和 SQL 托管实例,然后在对象资源管理器中,展开“Always On 高可用性”中“可用性组”节点下的“可用性副本”。 如果两个不同的副本列为“(主要)”,则表明你处于裂脑应用场景中。
或者,可以在 SQL Server 和 SQL 托管实例上运行以下 T-SQL 脚本来检查副本的角色:
-- Execute on SQL Server and SQL Managed Instance
declare @link_name varchar(max) = '<DAGName>'
USE MASTER
GO
SELECT
ag.name [Link name],
rs.role_desc [Link role]
FROM
sys.availability_groups ag
join sys.dm_hadr_availability_replica_states rs
on ag.group_id = rs.group_id
WHERE
rs.is_local = 1 and ag.name = @link_name
GO
如果两个实例在“链接角色”列中列出不同的主要副本,则表示你处于裂脑应用场景中。
若要解决裂脑状态,请先对原始主副本执行备份。 如果原始主副本是 SQL Server,则执行结尾日志备份。 如果原始主副本是 SQL 托管实例,则执行仅复制完整备份。 备份完成后,将分布式可用性组设置为副本的辅助角色,该副本曾经是原始主要副本,但现在将成为新的次要副本。
例如,如果发生真正的灾难,假设已强制将 SQL Server 工作负载故障转移到 Azure SQL 托管实例,并且打算继续在 SQL 托管实例 上运行工作负载,请在 SQL Server 上执行结尾日志备份,然后将分布式可用性组设置为 SQL Server 上的辅助角色,如以下示例所示:
--Execute on SQL Server
USE MASTER
ALTER availability group [<DAGName>]
SET (role = secondary)
GO
接下来,使用链接执行从 SQL 托管实例到 SQL Server 的计划内手动故障转移,如以下示例所示:
--Execute on SQL Managed Instance
USE MASTER
ALTER availability group [<DAGName>] FAILOVER
GO
相关内容
有关链接功能的详细信息,请参阅以下资源: