Sql-Server
主節點進入解析狀態時,如何防止主節點的SQL作業執行?
我在 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,如果傳遞給函式的數據庫不是可用性組的一部分,就會出現這種情況。