使用 Always On 可用性组


本页介绍了 SQL Server 中的 Always-On 可用性组,以及 Datastream 如何在故障切换和数据恢复场景中支持它们。

Always On 可用性组概览

在 SQL Server 中,Always On 可用性组是一种高可用性解决方案,可让您为灾难恢复方案准备数据库。

Always On 可用性组可最大限度地提高企业的数据库可用性。 可用性组支持为一组选定的数据库(称为可用性数据库)提供复制环境。每个组都包含一组用于读写任务的主数据库,以及最多八组对应的辅助数据库。辅助数据库可以选择性地允许只读访问或备份操作。

如需详细了解 Always On 可用性组,请参阅 SQL Server 文档中的什么是 Always On 可用性组?

如需了解 SQL Server 实例的 Always On 可用性组前提条件,请参阅 SQL Server 文档

配置 Datastream 以便与 Always On 可用性组搭配使用

Datastream 支持将变更表 CDC 方法与同步提交可用性模式搭配使用。在此模式下,辅助数据库会与相应的主数据库保持同步,直到数据同步停止。仅当辅助副本将传入的事务日志记录写入磁盘时,才会向客户端发送事务确认。

如需了解可用性模式,请参阅始终开启的可用性组的可用性模式之间的差异

如需配置 SQL Server 实例以与 Always On 可用性组搭配使用,您需要启用 SQL Server 代理,以便在发生故障切换时捕获日志,然后运行清理作业。在此之前,您需要修改 CDC 代理作业步骤,以检查当前副本是否确实是主副本。这是使用 sys.fn_hadr_is_primary_replica 函数完成的。

使用以下命令设置实例:

  -- Check if the current replica is a primary for the corresponding database.
  USE [DATABASE_NAME];
  DECLARE @DatabaseName SYSNAME = DB_NAME();
  IF (SELECT sys.fn_hadr_is_primary_replica(@DatabaseName)) = 1
  BEGIN
  -- If the replica isn't a primary, the code block that follows is skipped
  EXECUTE sys.sp_cdc_add_job @job_type = 'capture';
  EXECUTE sys.sp_cdc_add_job @job_type = 'cleanup';
  END

已知限制

将 Datastream 与 Always On 可用性组搭配使用的已知限制包括:

  • Datastream 不支持基于监听器 IP 地址的专用 DNS 解析。您必须手动切换复制品的 IP 地址。
  • 在可用性组故障切换后,您必须手动确保 SQL Server 代理捕获和清理作业在新主节点上运行。如果未执行此操作,并且在 Datastream 读取更改之前事务日志被截断,可能会导致数据丢失。
  • 如果副本的创建时间早于主副本,则必须向数据流添加 always_on_availability: true 标签,以防止出现数据完整性问题。如需了解如何向数据流添加标签,请参阅为数据流定义设置

后续步骤