Sql-Server

將帶有 Service Broker 的數據庫添加到新副本上的現有可用性組

  • July 15, 2019
  • 伺服器 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 出現單點故障(新的主副本)。考慮在故障轉移到新實例之前升級所有輔助副本。故障轉移後,升級您的(以前的)主副本。有關滾動升級的更多資訊,請參見此處

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