【发布时间】:2012-11-21 12:33:46
【问题描述】:
我能否在 SQL Server 数据库服务器上的 distribution 或 msdb 数据库中的某处找到复制是否连续? (2005 年和 2008 年)
背景:
我正在制作一个复制监控系统,当复制在 X 时间内没有成功合并时,它会发出警报(通过电子邮件)。为此,我定期查询distribution 数据库的MSreplication_monitordata 和MSmerge_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_date 和 next_run_time 字段为 0,但我不知道如何将其链接到 sysjobs。
【问题讨论】:
标签: sql-server sql-server-2008 sql-server-2005 database-replication merge-replication