Sql-Server

主節點進入解析狀態時,如何防止主節點的SQL作業執行?

  • May 7, 2022

我在 AG 中有 2 個節點。不可讀的輔助,同步送出模式。

兩台機器上都設置了 sql 代理作業。計劃在次要關閉,因此這些作業不會執行。如果有故障轉移,那麼我們手動啟用輔助作業的計劃。

計劃幾乎每分鐘執行各種作業。

當主伺服器出現故障(技術上是因為網路問題)但機器正在執行時,我如何立即阻止主伺服器上計劃的 sql 代理作業執行?

將作業的 T-SQL 包裝到以下程式碼中:

if  ((select primary_replica from sys.dm_hadr_availability_group_states) = @@SERVERNAME
   and (select primary_recovery_health_desc from sys.dm_hadr_availability_group_states)  = 'ONLINE'
   and (select synchronization_health_desc from sys.dm_hadr_availability_group_states)  = 'HEALTHY')
begin
   <T-SQL here>
end

這樣,T-SQL 將僅在 SQL Server 處於主要角色、線上且同步正常時執行

您可以在作業步驟中使用內置的系統函式來檢查副本是否是主副本。

sys.fn_hadr_is_primary_replica(‘<dn_name>’)

如果返回 1,則執行某些操作,否則退出作業。

IF COALESCE(sys.fn_hadr_is_primary_replica(‘<dn_name>’),1) = 1
BEGIN
   Do something…
END

COALESCE 說明函式返回 NULL,如果傳遞給函式的數據庫不是可用性組的一部分,就會出現這種情況。

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