Sql-Server-2016

來自連結伺服器的故障轉移可用性組

  • June 22, 2019

我希望你們都可以幫助我解決一個非常簡單的問題,但我正在努力尋找解決方案。

我們正在執行 SQL Server Standard 2016 並利用 2 個節點之間的可用性組。按照標準,每個可用性組只能有 1 個數據庫。

每月一次,我們需要修補我們的伺服器,手動故障轉移每個組然後再回來修補是絕對痛苦的。我的解決方案是我有第三台伺服器,它有節點 1 和 2 作為連結伺服器,這有助於我管理 50 多個可用性組以及我們所做的一些其他與應用程序相關的事情。

我有一個到 2 個節點的連接,作為一項工作,我收集並更新伺服器 3 上的一個表,其中包含 2 個主節點的每個數據庫、可用性組名稱、節點名稱等。它每 5 分鐘執行一次,並提醒我注意問題。

我的最後一步是現在在伺服器 3 上有一個儲存過程,這將只允許我對可用性組或單個等進行故障轉移。它工作得很好,除了在一個節點上,在另一個節點上,我得到這個錯誤:

僅當您使用主數據庫時才允許可用性組 DDL 操作。執行 USE MASTER 命令,然後重試可用性組 DDL 命令。

我的這個命令的程式碼如下:

SET @Query = 'EXEC (''ALTER AVAILABILITY GROUP [' + @CurrentAG + '] FAILOVER'') AT [' + @FailoverServer + '];'
       EXEC sp_executesql @Query

最終得到這個命令:

EXEC ('ALTER AVAILABILITY GROUP [MyAvailGroup] FAILOVER') AT [DestinationLinkedServerNode];

感謝您對此的任何幫助。

要回答您的問題,如果您在主副本上執行以下操作,則應如下所示。

SET @Query = 'EXEC (''use master; ALTER AVAILABILITY GROUP [' + @CurrentAG + '] FAILOVER'') AT [' + @FailoverServer + '];'
       EXEC sp_executesql @Query

更好的解決方案是使用 dbatools 啟動故障轉移Invoke-DbaAgFailover。這樣,您不必使用任何額外的伺服器或連結伺服器。這也將是非常靈活的解決方案。

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