要求
环境:
SQL Server Always On Availability Groups中暂停数据传输
从主副本上执行暂停数据传输
从辅助副本上执行暂停数据传输
SQL Server Always On Availability Groups中如何暂停数据传输


ALTER DATABASE [SQLShackdemo] SET HADR SUSPENDGO
操作完成后,它会在数据库前加上一个暂停符号,以表明数据传输已停止。(译者注:SQLServer 2019下暂停数据同步之后,数据库上是一个?的符号,不是暂停符号,主节点并不显示红叉的符号)



暂停数据同步对主副本数据库的影响
通常情况下,在单实例数据库中,SQL Server 会在日志备份后截断事务日志。对于同步可用性组,在执行日志备份时,它也会在checkpoint截断日志,因为它会先在辅助副本上提交数据。
现在,如果我们暂停了数据同步,主副本数据库会继续保留事务日志。即使你定期执行事务日志备份,它也不会截断日志。这可能会导致事务日志被填满,从而引发磁盘空间不足的问题。因此,不建议长时间暂停数据传输,尤其是在高并发 OLTP 环境下。
但是,如果仍然遇到事务日志已满的问题,你需要考虑增加磁盘空间、恢复数据传输,或者移除可用性组数据库。
恢复Always On Availability Groups 数据传输

相应地,您也可以运行以下的 T-SQL 脚本。
ALTER DATABASE [SQLShackdemo] SET HADR RESUME;GO
如果我们是从主副本暂停的数据传输,也应该从主副本恢复数据传输。这会恢复所有辅助副本的数据传输。
然而,如果我们是在辅助实例本地暂停的数据传输,则必须从该辅助实例恢复。恢复后,它会捕获所有待处理的事务日志,并根据配置将数据库状态更改为 Synchronized/ synchronizing。在与主副本完全同步之前,辅助数据库会以 异步数据提交 的方式工作。
这些操作也会记录在 SQL Server 错误日志中。下图中,我们可以看到一些关于暂停、恢复和恢复 LSN 的高亮日志。

通过DMV动态管理视图来监控数据移动的暂停与恢复情况
我们可以利用动态管理视图来监控数据从主副本向从副本的转移情况。
SELECT ar.replica_server_name, adc.database_name, ag.name AS ag_name, dhdrs.synchronization_state_desc, dhdrs.is_commit_participant, dhdrs.last_sent_lsn, dhdrs.last_sent_time, dhdrs.last_received_lsn, dhdrs.last_hardened_lsn, dhdrs.last_redone_timeFROM sys.dm_hadr_database_replica_states AS dhdrsINNER JOIN sys.availability_databases_cluster AS adc ON dhdrs.group_id = adc.group_id AND dhdrs.group_database_id = adc.group_database_idINNER JOIN sys.availability_groups AS ag ON ag.group_id = dhdrs.group_idINNER JOIN sys.availability_replicas AS ar ON dhdrs.group_id = ar.group_id AND dhdrs.replica_id = ar.replica_idwhere database_name='SQLShackDemo'
在下面的输出中,我们捕获了 LSN 和 提交参与者 的详细信息,场景如下:
第一部分:数据库在两个副本中均处于同步状态
is_commit_participant 列显示为 1,表示我们配置了 同步提交模式,且两个副本都参与数据提交。
在主副本和辅助副本中,last_hardened_lsn 显示相同的值,同时它也等于 SQLNodeINST1 实例中的 last_sent_lsn。
第二部分:暂停主副本与辅助副本之间的数据传输后
辅助副本 SQLNodeINST1 的 is_commit_participant 显示为 0,表示辅助副本不参与提交(暂停状态)。
虽然配置了同步提交模式,此时 AG 实际上以 异步提交 方式工作。
可以看到两个副本的 last_hardened_lsn 出现差异。
在暂停状态下,辅助副本无法接收事务块,因此不会在辅助数据库上应用任何日志。
第三部分:恢复数据传输后
is_commit_participant 再次标记为 1,辅助副本重新处于同步状态。
两个副本的 last_hardened_lsn 再次匹配。
