如何从可用性组中删除辅助数据库并重新加入它

Ton*_*kle 5 sql-server availability-groups

我有一个具有多个数据库(DB-A、DB-B、DB-C)和多个辅助数据库(SEC-B、SEC-C)的可用性组 (AG),其中一个数据库不会仅在其中一个数据库上恢复同步次要。

对于此示例,DB-C 未在 SEC-C 上同步,并且重新启动 SQL Server 或恢复 HADR 再多也不会使它重新启动。

  • 我不想从 AG 中删除副本(辅助 SEC-C),因为我将不得不重新同步所有数据库(DB-A、DB-B 和 DB-C),这将花费更多时间比必要的。

  • 我也不想从 AG 中完全删除数据库 (DB-C),因为还有其他辅助 (SEC-B) 没有问题,而且我不想重新同步它或暂时丢失我的HADR 在它工作的辅助节点上。

如何从 AG 中仅删除这个辅助数据库,重新同步它,然后将其添加回 AG?

Ton*_*kle 7

这可以通过简单地从可用性组 (AG) 中删除辅助数据库、还原备份以使其恢复同步,然后将其添加回 AG 来完成。SQL Server Management Studio 支持从 AG 中删除辅助数据库并将其添加回来,但它没有向导(在撰写本文时)来执行备份、还原和重新加入所需的所有步骤。

  1. 通过在数据库未同步的辅助数据库(OP 示例中的 SEC-C)上运行以下 T-SQL,从 AG 中删除辅助数据库:

    ALTER DATABASE DB-C SET HADR OFF

    请参阅从可用性组中删除辅助数据库。您还可以在 SSMS 中执行此步骤,方法是深入到辅助服务器AG 下的数据库,右键单击它,然后选择将其删除的选项。

  2. 从辅助数据库中删除数据库。

  3. 对仍位于 AG 中并已同步的数据库副本之一进行完整备份和至少一个日志备份,并将它们还原到辅助数据库。如果它是一个大而繁忙的数据库,并且您要恢复到 DR 站点,则这可能需要一天以上的时间。 一定要让数据库处于恢复模式(使用 NORECOVERY 恢复)!

    请参阅为 Always On 可用性组准备辅助数据库

  4. 当辅助数据库赶上恢复到它的最新日志备份时,通过在辅助数据库上运行以下命令(在 OP 示例中为 SEC-C)将其加入 AG:

    ALTER DATABASE DB-C SET HADR AVAILABILITY GROUP = AG_name

    有关详细信息,包括如何在 SSMS 中执行此步骤,请参阅将辅助数据库加入 Always On 可用性组

这个答案旨在成为一个高层次、简洁的指南。这一切都由 Microsoft 详细记录,但它分布在多个页面上,当然这些页面包含更多信息,并且这些页面属于不同的类别。删除辅助数据库的页面位于:

业务连续性 -> Always On 可用性组 -> How-to -> Operation

和引用的其他页面在

业务连续性 -> Always On 可用性组 -> How-to -> 配置可用性组。


Kin*_*hah 6

您也可以使用 dbatools。

下面将从给定的可用性组中获取一个数据库,然后将其删除。

Get-DbaAgDatabase -SqlInstance SecondaryServerName -AvailabilityGroup AG101 -Database DBNameYouWantToRemove | remove-dbaagdatabase 
Run Code Online (Sandbox Code Playgroud)

然后将数据库添加回 ag 组。

Get-DbaAgDatabase -SqlInstance PrimaryServerName -Database DBNameYouWantToAdd | Add-DbaAgDatabase -AvailabilityGroup SharePoint -Secondary SecondaryServerName -AvailabilityGroup AG101
Run Code Online (Sandbox Code Playgroud)