我有一个包含多个数据库(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?
这可以通过简单地从可用性组 (AG) 中删除辅助数据库、还原备份以使其重新同步,然后将其添加回 AG 来完成。SQL Server Management Studio 支持从 AG 中删除辅助数据库并将其添加回来,但它没有向导(在撰写本文时)来执行备份、还原和重新加入所需的所有步骤。
通过在数据库未同步的辅助数据库(OP 示例中的 SEC-C)上运行以下 T-SQL,从 AG 中删除辅助数据库:
ALTER DATABASE DB-C SET HADR OFF
请参阅从可用性组中删除辅助数据库。您还可以在 SSMS 中执行此步骤,方法是深入到辅助节点上AG 下的数据库,右键单击它,然后选择删除它的选项。
从辅助数据库中删除数据库。
对仍在 AG 中且已同步的其中一个数据库副本进行完整备份和至少一个日志备份,然后将它们还原到辅助节点。如果它是一个庞大而繁忙的数据库,并且您要恢复到 DR 站点,这可能需要一天以上的时间。 一定要让数据库处于恢复模式(使用 NORECOVERY 恢复)!
请参阅为 Always On 可用性组准备辅助数据库。
当您让辅助数据库赶上恢复到它的最新日志备份时,通过在辅助数据库上运行以下命令(在 OP 示例中为 SEC-C)将其加入 AG:
ALTER DATABASE DB-C SET HADR AVAILABILITY GROUP = AG_name
有关详细信息,包括如何在 SSMS 中执行此步骤,请参阅将辅助数据库加入 Always On 可用性组。
这个答案旨在成为一个高层次、简洁的指南。微软对此都有很好的记录,但它分布在多个页面上,这些页面当然有更多的信息,并且页面属于不同的类别。删除辅助数据库的页面如下:
业务连续性 -> Always On 可用性组 -> 操作方法 -> 操作
和引用的其他页面在
业务连续性 -> Always On 可用性组 -> 操作方法 -> 配置可用性组。
您也可以使用 dbatools。
下面将从给定的可用性组中获取数据库,然后将其删除。
然后将数据库添加回 ag 组。