將帶有 Service Broker 的數據庫添加到新副本上的現有可用性組
- 伺服器 1 - SQL Server 2016(現有 AG 中的主要伺服器)
- 伺服器 2 - SQL Server 2016(現有 AG 中的輔助伺服器)
- 伺服器 3 - SQL Server 2016(現有 AG 中的異地輔助伺服器)
- 伺服器 4 - SQL Server 2017(新伺服器,注定成為新的主伺服器)
大約 800GB 的數據庫在 2016 AG 上愉快地執行。它啟用了 Service Broker 並且執行良好。
計劃是將數據庫恢復到伺服器 4,將其添加到 AG,然後手動故障轉移,因此伺服器 4 是主伺服器,以便將伺服器 1、2 和 3 升級到 SQL 2017。
伺服器 4 的驅動器配置與其他伺服器不同,因此為了將數據庫添加到 AG,我使用 dba-tools Restore-DbaDatabase 命令。數據庫必須處於 NORECOVERY 模式才能最終將其添加到 AG。
這裡的問題是,在將服務代理添加到 AG 之前,必須通過數據庫上的 ENABLE_BROKER 啟用服務代理,而由於數據庫的 NORECOVERY 狀態,這是不可能的。還必須設置 SET TRUSTWORTHY ON。
有沒有辦法在不拆除整個 AG 的情況下實現這一目標?
我真的想避免這種情況,因為在最初加入 AG 時,將備份複製和恢復到異地伺服器(伺服器 3)需要很長時間。
事實證明,本指南對流程的其餘部分很有用。
SET TRUSTWORTHY ON
和都是ENABLE_BROKER
數據庫設置。當您備份和恢復數據庫時,這些設置將包含在 bak 文件中,並且可以在新的 SQL 實例上恢復。不過,您可能需要進行一些伺服器級別的配置,例如此處描述的服務代理端點
**編輯:**只是為了澄清,在恢復備份時,您不需要指定
ENABLE_BROKER
選項。將數據庫加入 AG 後,代理設置將從主副本同步。您只需要使用NORECOVERY
.附帶說明一下,當您將 SQL Server 2017 實例添加到 AG 並故障轉移到它時,您將無法故障恢復。這會使您的 AG 出現單點故障(新的主副本)。考慮在故障轉移到新實例之前升級所有輔助副本。故障轉移後,升級您的(以前的)主副本。有關滾動升級的更多資訊,請參見此處