Sql-Server

SQL Server 代理作業和可用性組

  • October 27, 2018

我正在尋找處理 SQL Server 2012 可用性組中計劃的 SQL Server 代理作業的最佳實踐。也許我錯過了一些東西,但是在目前的狀態下,我覺得 SQL Server Agent 並沒有真正與這個偉大的 SQL2012 功能集成。

如何讓計劃的 SQL 代理作業知道節點切換?例如,我有一個在主節點上執行的作業,它每小時載入數據。現在,如果主節點出現故障,我如何啟動現在成為主節點的輔助節點上的作業?

如果我總是將作業安排在輔助伺服器上,它會失敗,因為輔助伺服器是只讀的。

在您的 SQL Server 代理作業中,有一些條件邏輯來測試目前實例是否正在為您在可用性組中尋找的特定角色提供服務:

if (select
       ars.role_desc
   from sys.dm_hadr_availability_replica_states ars
   inner join sys.availability_groups ag
   on ars.group_id = ag.group_id
   where ag.name = 'YourAvailabilityGroupName'
   and ars.is_local = 1) = 'PRIMARY'
begin
   -- this server is the primary replica, do something here
end
else
begin
   -- this server is not the primary replica, (optional) do something here
end

所有這一切都是拉取本地副本的目前角色,如果它在PRIMARY角色中,如果它是主副本,您可以執行您的工作需要做的任何事情。該ELSE塊是可選的,但如果您的本地副本不是主要的,它會處理可能的邏輯。

當然,'YourAvailabilityGroupName'將上述查詢更改為您的實際可用性組名稱。

不要將可用性組與故障轉移集群實例混淆。實例是給定可用性組的主要副本還是次要副本不會影響伺服器級對象,例如 SQL Server 代理作業等。

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