Sql-Server

如何在 AOAG 故障轉移時自動啟用或禁用報告作業?

  • June 18, 2018

我有AlwaysOn Availability Group2 個數據庫伺服器。當這些數據庫伺服器中的任何一個重新啟動時(無論出於何種原因關閉電源後),我都試圖以SQL Server Agent Alerts程式方式禁用一些SQL Server Agent作業(不得在輔助伺服器上執行)。

我看到該消息35266,例如,AlwaysOn Availability Groups connection with primary database established for secondary database 'XXXX' ......在數據庫伺服器啟動時記錄。所以,我可以為它設置一個警報並執行一個作業來禁用我上面提到的作業。但是,我注意到每個數據庫始終記錄此消息兩次,一個緊接著另一個。

為什麼每個數據庫記錄兩次消息 #35266?

事實證明,AOAG 事件 ID #35266 在節點啟動或關閉時經常發生 2 或 3 次。只要您在檢測到 35266 時所做的操作本質上不是類似於切換的,您應該沒問題。它在我的情況下工作正常,因為當我檢測到 35266 時我所做的是(取決於事件中的文本)啟用或禁用特定作業。因此,如果我在主節點上快速連續啟用我的作業 2 或 3,沒什麼大不了的

這就是我最終得到的。

創建 SQl 伺服器代理作業“啟用或禁用 Rpt 作業”

接受預設值,以下除外

  • 名稱:啟用或禁用 Rpt 作業
  • 所有者:有權執行 T-SQL 以啟用/禁用 SQL Server 代理作業的帳戶
  • 啟用:選中

創建作業步驟:

  • 步驟名稱:enable_or_disable
  • 類型:Transact-SQL 腳本
  • 數據庫:主

命令:

DECLARE @DB nvarchar(25)
DECLARE @MSG nvarchar(200)
SET @DB = '{DB name that provides report data}'

If sys.fn_hadr_is_primary_replica ( @DB ) = 1  
BEGIN 
   EXEC msdb.dbo.sp_update_job @job_name='{job name}',@enabled = 1
   .
   .
   .
   EXEC msdb.dbo.sp_update_job @job_name='{job name}',@enabled = 1
   SET @MSG = '"' + @DB + '" is PRIMARY. Enabled report jobs'
   PRINT @MSG
END 
ELSE
BEGIN
   EXEC msdb.dbo.sp_update_job @job_name='{job name}',@enabled = 0
       .
       .
       .
   EXEC msdb.dbo.sp_update_job @job_name='{job name}',@enabled = 1
   SET @MSG = '"' + @DB + '" is not PRIMARY. Disabled report jobs'
   PRINT @MSG
END

日程:

  • 啟用:是
  • 計劃類型:SQL Server 代理啟動時自動啟動

創建 SQl Server 代理警報 ‘Alert Disable Rpts on 35266’

接受預設值,以下除外

  • 名稱:警報禁用 Rpts on 35266
  • 數據庫名稱:
  • 錯誤號:35266
  • 當消息包含時發出警報:選中
  • 消息文本:為輔助數據庫“{提供報告數據的數據庫名稱}”建立與主數據庫的連接

範例:為輔助數據庫“DB_NAME”建立與主數據庫的連接

回复:

  • 執行任務:選中
  • 選擇作業:啟用或禁用 Rpt 作業

創建 SQl 伺服器代理警報“警報啟用 Rpts on 35266”

接受預設值,以下除外

  • 名稱:警報啟用 Rpts on 35266
  • 數據庫名稱:
  • 錯誤號:35266
  • 當消息包含時發出警報:選中
  • 消息文本:為主數據庫“{提供報告數據的數據庫名稱}”建立了與輔助數據庫的連接

範例:為主數據庫“DB_NAME”建立與輔助數據庫的連接

回复:

  • 執行任務:選中
  • 選擇作業:啟用或禁用 Rpt 作業

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