T-SQL脚本等待快照代理状态完成

时间:2018-12-21 15:57:13

标签: sql-server tsql

我正在尝试构建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

1 个答案:

答案 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