【问题标题】:Is whether a replication is continuous queryable anywhere?复制是否可以在任何地方连续查询?
【发布时间】:2012-11-21 12:33:46
【问题描述】:

我能否在 SQL Server 数据库服务器上的 distributionmsdb 数据库中的某处找到复制是否连续? (2005 年和 2008 年)

背景: 我正在制作一个复制监控系统,当复制在 X 时间内没有成功合并时,它会发出警报(通过电子邮件)。为此,我定期查询distribution 数据库的MSreplication_monitordataMSmerge_sessions 表。 为了测试复制是否已超过其警报时间,我对MSreplication_monitordata 中的每个条目执行以下操作,以查看上次成功复制的时间:

select top 1 end_time
from MSmerge_sessions
where runstatus=2 and agent_id=@AgentId
order by end_time desc

runstatus=2 过滤器仅用于“完成”状态 (see documentation)

问题在于,连续复制只有一个 MSmerge_sessions 条目,该条目不断更新其 end_time,但其状态也为 3,这意味着“正在进行”。我不能只测试那个,因为这会返回非连续的复制会话,这些会话可能在完成之前失败。

我尝试查看MSmerge_sessions.current_phase_id 列是否有用,但它没有记录,我无法推断它的含义。 我还尝试了msdb 数据库,因为这是保存复制作业记录的地方(在sysjobs 表中)。 sysjobschedules 表似乎很有希望,其中一些 next_run_datenext_run_time 字段为 0,但我不知道如何将其链接到 sysjobs

【问题讨论】:

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


    【解决方案1】:

    好的,所以这没有我希望的那么漂亮,但就是这样:

    select 
        agent.*,
        case when exists(
            select *
            from msdb.dbo.sysjobsteps step
            where agent.job_id=step.job_id
            and step.step_id=2
            and step.command like '%-Continuous%')
            then 1
            else 0
        end as Continuous
    from distribution.dbo.MSmerge_agents agent
    

    this script 推断,我通过绝望的互联网搜索找到了它。 这假定字符串匹配不区分大小写。

    如果有人有更好/更整洁/更漂亮的解决方案,我仍然会将答案奖励给他们。

    【讨论】:

      猜你喜欢
      • 2018-08-05
      • 1970-01-01
      • 2019-09-03
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      相关资源
      最近更新 更多