【问题标题】:How to check replication snapshot agent status?如何检查复制快照代理状态?
【发布时间】:2014-09-21 23:39:05
【问题描述】:

我想在使用此语句启动代理后检查代理的状态

EXEC sp_startpublication_snapshot @publication

因为我想做一个需要已经开始工作的下一步。

【问题讨论】:

    标签: sql sql-server sql-server-2008-r2 database-replication merge-replication


    【解决方案1】:

    我不相信有一个内置的复制存储过程来检查快照代理状态,我可能是错的。但是,您可以查询 MSsnapshot_history。像这样的东西应该可以解决问题:

    SELECT 
        agent_id, 
        runstatus, 
        start_time, 
        time, 
        duration, 
        comments, 
        delivered_transactions,
        delivered_commands, 
        delivery_rate, 
        error_id, 
        timestamp 
    FROM dbo.MSsnapshot_history
    WHERE comments = 'Starting agent.'
    

    同样,您可以检查快照代理何时完成:

    SELECT 
        agent_id, 
        runstatus, 
        start_time, 
        time, 
        duration, 
        comments, 
        delivered_transactions,
        delivered_commands, 
        delivery_rate, 
        error_id, 
        timestamp 
    FROM dbo.MSsnapshot_history
    WHERE comments = '[100%] A snapshot of 68 article(s) was generated.'
    

    或者,您可以使用 sp_help_job 了解快照代理作业的状态。

    【讨论】:

      【解决方案2】:

      经过一番研究,我找到了解决方法

      SELECT snapshot_ready FROM sysmergepublications 
      

      此查询如果未准备好返回 0,如果已启动则返回 1

      感谢大家的贡献:)

      【讨论】:

        【解决方案3】:

        您还可以在执行其他脚本之前使用 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
        

        参考:T-SQL script to wait till status of snap agent is completed

        【讨论】:

          【解决方案4】:

          我意识到这是一个较旧的线程。但是,由于这仍然很可能是当前 SQL 版本(截至本次更新的 2017/2019 版本)中需要完成的事情,所以这是我在 powershell 中使用的一个函数。其目的是等待快照可用,然后在我们的 DEV/QA 环境中重建复制。

          # =======================================================================================================================================
          # WAIT UNTIL SNAPSHOT CREATED
          # =======================================================================================================================================
          Function Wait-ForSnapshotCreation {
              [Cmdletbinding()]
          
              Param (
                  [int] $InitialSleepInSec = 60
                 ,[int] $IncrementalSleepInSec = 2
                 ,[string] $ReplicationPublication
                 ,[string] $ReplicationDistributor
              )
          
              Process {
                  $SleepMessage = "Sleeping for {0} seconds at the start..." -f $InitialSleepInSec
                  $TotalSleepInSec = $SleepInSec
                  $MonitorSQL = "exec sp_replmonitorhelppublication @publication = N'$ReplicationPublication'"
                  Write-Message -Message ($SleepMessage)
                  Start-Sleep -s $InitialSleepInSec
          
                  Do {
                       $MonitorStatus = (Invoke-SQLCmd -Query ($MonitorSQL) -ServerInstance $ReplicationDistributor -Database 'Distribution' -AbortOnError)
                       If ($MonitorStatus.status -eq 3) {
                           $SleepMessage = "Replication status is still 'running' (3).   Will sleep for {0} more seconds. Slept {1} seconds so far..." -f $IncrementalSleepInSec, $TotalSleepInSec
                           Write-Message -Message ($SleepMessage)
          
                           Start-Sleep -s $IncrementalSleepInSec
                           $TotalSleepInSec += $IncrementalSleepInSec
          
                       } # If...
          
                  } Until ($MonitorStatus.status -ne 3)
          
              } # Process
          
          } # Function
          
          

          以下是一个示例调用(在创建订阅者之前使用):

          Wait-ForSnapshotCreation -InitialSleepInSec 15 -IncrementalSleepInSec 1 -ReplicationPublication '<YOUR_PUBLICATION>' -ReplicationDistributor '<YOUR_DISTRIBUTION_SERVER_INSTANCE>'
          

          【讨论】:

            【解决方案5】:

            检查其运行状态。以下是它的价值观: 1 = 开始。

            2 = 成功。

            3 = 进行中。

            4 = 空闲。

            5 = 重试。

            6 = 失败。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-05-18
              • 1970-01-01
              • 1970-01-01
              • 2017-09-09
              • 2017-07-25
              • 1970-01-01
              • 2015-10-10
              相关资源
              最近更新 更多