Vla*_*sky 2 sql-server high-availability jobs
我有只需要在 AlwaysOn 可用性组上的主要副本上的 SQL 作业。最初创建作业时,ServerA 是主要的,后来 ServerB 成为主要的,因此 ServerA 上的作业失败,必须在 ServerB 上手动重新创建作业才能正常运行。
仅在 AlwaysOn 可用性组的主副本上运行作业的方法是什么?
让作业仅在主节点上执行的一种简单方法是对作业进行简单检查,以验证'PRIMARY'
正在执行作业时哪个节点。可以用简单的sql语句完成:
DECLARE @ServerName NVARCHAR(256) = @@SERVERNAME
DECLARE @RoleDesc NVARCHAR(60)
SELECT @RoleDesc = a.role_desc
FROM sys.dm_hadr_availability_replica_states AS a
JOIN sys.availability_replicas AS b
ON b.replica_id = a.replica_id
WHERE b.replica_server_name = @ServerName
IF @RoleDesc = 'PRIMARY'
BEGIN
--Logic for the job goes here
END
Run Code Online (Sandbox Code Playgroud)
现在只需在BEGIN
和END
关键字之间放置逻辑。
就像 Aaron 在评论中指出的那样,仍然必须在所有服务器上以相同的逻辑创建作业,以确保它只在主副本上运行,而不是在辅助副本上运行。有一些脚本和工具可用于将作业从主要副本复制到次要副本。