如何在 AOAG 故障轉移時自動啟用或禁用報告作業?
我有
AlwaysOn Availability Group
2 個數據庫伺服器。當這些數據庫伺服器中的任何一個重新啟動時(無論出於何種原因關閉電源後),我都試圖以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 作業