我正在尝试构建SQL脚本,以等待快照代理完成快照创建(如果正在进行),然后再删除复制
当前状态: 我们有一些禁用复制的SQL脚本(它们作为VSTS发布管道的一部分运行)。有时,可能会生成快照。如果在进行快照时禁用了复制,则脚本将失败。
我正在使用以下脚本检查快照代理的状态
选择状态 来自dbo.MSReplication_monitordata 在哪里发布='PublicationName'和agent_type = 1)= 3
最终目标:
我需要帮助来实现以下目标:
脚本检查快照代理是否正在运行。如果它正在运行,它将等到完成(生成快照),然后执行操作(删除复制)。
我已经有了删除复制的脚本,我需要帮助的是处理这种情况的逻辑。
编辑:
我的问题不是How to check replication snapshot agent status?的重复项
我需要逻辑上的帮助来创建脚本,以等待快照代理处于空闲状态(如果正在运行)。我不知道如何在t-sql中做到这一点。
我相信(waitfor)或(while)会有所帮助,但我不知道如何使用它们。
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/waitfor-transact-sql?view=sql-server-2017 https://docs.microsoft.com/en-us/sql/t-sql/language-elements/while-transact-sql?view=sql-server-2017
答案 0 :(得分:0)
我可以在下面使用while循环:
use [distribution];
declare @status int = 2
select @status = status
FROM dbo.MSReplication_monitordata
WHERE publication = 'PublicationName' and agent_type = 1
while @status = 3
begin
WAITFOR DELAY '00:00:03'
select @status = status
FROM dbo.MSReplication_monitordata
WHERE publication = 'Publication.Name' and agent_type = 1
end