在 SQL Server Always ON 配置中 - 将事务日志备份到 Nul 会中断 Always On 配置吗?

Posted

技术标签:

【中文标题】在 SQL Server Always ON 配置中 - 将事务日志备份到 Nul 会中断 Always On 配置吗?【英文标题】:In SQL Server Always ON configuration - will Transaction Log backup to Nul breaks Always On configuration? 【发布时间】:2015-08-31 23:08:58 【问题描述】:

假设我们有两个节点参与 SQL 2012 AO。这是一个测试实例。在一次索引重建操作期间,日志变得非常大(250 GB)。由于空间限制,我们无法备份它。如果我们将 Tlog 备份到 Nul(只是为了缩小它)会怎样——这会破坏 Always On 吗?

【问题讨论】:

【参考方案1】:

AlwaysOn 是一个(营销)总称,涵盖可用性组 (AG) 和故障转移集群实例 (FCI)。从上下文来看,我假设您是在询问 AG?

对于 FCI 和 AG,简短的回答是相同的:执行事务日志备份(无论目标如何)不会“破坏”您的 HA 功能。但是,我会敦促您永远不要备份到 NUL:,除非您不关心数据库中的数据。将日志备份到 NUL:(无论您使用的是 AG、FCI 还是两者都不使用)会破坏您的日志备份链,并阻止时间点恢复。

如果您使用的是可用性组,SQL Server 不会使用事务日志备份 在节点之间进行同步。它使用事务日志本身,因此如果有日志数据需要同步到另一个节点,则不会清除事务日志。也就是说:如果您的 AG 同步落后,您的事务日志将继续填充/增长,直到同步赶上,无论执行多少事务日志备份。

您的事务日志可能会继续增长有多种原因,而 AG 同步只是其中之一。如果 SQL Server 由于 AG 中的事务不同步而无法重用事务日志,sys.databases 中的log_reuse_wait_desc 列将显示值“AVAILABILITY_REPLICA”。

回到你的根本问题:重建索引让你的事务日志变得非常非常大。

当您执行ALTER INDEX...REBUILD 时,SQL Server 会创建整个新索引(数据大小操作),并且如果索引创建出错或在完成之前被终止,则必须能够回滚。因此,您可能会看到sys.databases 中的log_reuse_wait_desc 列在非常大、长时间运行的索引重建期间显示为“ACTIVE_TRANSACTION”。重建本身会阻止您重用日志,并会导致日志增长。

【讨论】:

以上是关于在 SQL Server Always ON 配置中 - 将事务日志备份到 Nul 会中断 Always On 配置吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 高可用(always on)配置指南之节点配置

Configure Always On Availability Group for SQL Server on RHEL——Red Hat Enterprise Linux上配置SQL Server

SQL Server 安装好后 Always On群组配置

SQL Server 高可用(always on)配置指南之域(AD)环境搭建

Windows Server 2012搭建SQL Server Always On踩坑全记录

SQL Server2019配置always on高可用图文步骤