Sql-Server

無法從輔助 Windows 群集上的分佈式 AlwaysOn 組中刪除數據庫

  • August 31, 2021

我們有跨兩個 Windows 集群的分佈式 AG。

  • Clus01 - 設置了一個 AG,其中沒有 DB (AG1)
  • Clus02 - 有一個內部沒有數據庫的 AG (AG2)
  • Clus01 - 使用 AG1(主要)和 AG2(次要)設置 DistAG

我們

  • 將 Clus02 加入 DistAG
  • 在 Clus01 上向 AG1 添加了一個數據庫
  • 將此數據庫恢復到 AG2
  • 將此數據庫添加到 Clus02 上的 AG2(顯示為主要,但在 DistAG 中實際上是次要的)

Clus02 上的數據庫現在按預期工作…Clus01 上的任何數據庫更新都將使用 DistAG 來更新 Clus02 數據庫。

我們經常從現場刷新這個環境(這是 preprod)。所以我們必須將數據庫恢復到 CLus01。

對於我們普通的 AG,我們只需從 CLUS01 中刪除 DB,還原到 CLUS01,備份並還原到 CLUS02,然後再次加入 AG。

對於 DistAG,我不能

  1. 從 CLUS02 上的 AG2 中刪除 DB。
ALTER AVAILABILITY GROUP [AG_G2CoreReporting]
REMOVE DATABASE [Genesis];
GO

我們得到錯誤

消息 41190,級別 16,狀態 8,第 6 行可用性組“AG2”無法處理刪除數據庫命令。本地可用性副本未處於可以處理該命令的狀態。驗證可用性組是否聯機並且本地可用性副本是主副本,然後重試該命令。

  1. 從 CLUS01 上的 AG1 中刪除 DB。CLUS02 上 AG2 上的 DB 進入未同步狀態,我無法刪除(與上述相同的錯誤),因此無法在頂部恢復 DB。
  2. 通過在 CLUS01 上執行刪除 DistAG 上的副本
ALTER AVAILABILITY GROUP [DistAG]
REMOVE REPLICA ON N'AG2';

我們得到錯誤

消息 15151,級別 16,狀態 1,第 5 行無法更改可用性組“AG2”,因為它不存在或您沒有權限。

有沒有人知道如何使用 DistAG 刷新環境而無需刪除整個 DistAG 並重新設置?

有沒有人知道如何使用 DistAG 刷新環境而無需刪除整個 DistAG 並重新設置?

如果使用許多數據庫完成刪除和重新創建將是您最好的選擇……儘管我認為需要每天刷新分佈式可用性組中的數據庫。

唯一的其他選擇是在從全域主數據庫中刪除數據庫後讓分佈式可用性組故障轉移,以便轉發器成為新的全域主數據庫。然後,您將能夠從(現在是主要的)第二個可用性組中刪除數據庫。由於連接被殺死,這種方法的吸引力較小,而您已經擁有的 remove + add 方法將保持與目前全域主節點的連接。

您始終可以從轉發器或轉發器端的輔助伺服器中刪除數據庫ALTER DATABASE [name] SET HADR OFF

引用自:https://dba.stackexchange.com/questions/199615