我是否可以在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
相关联。
答案 0 :(得分:0)
好吧,所以这不如我希望的那么漂亮,但这里是:
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推断,我通过绝望的互联网搜索找到了它。 这假设字符串匹配不区分大小写。
如果有人有更好/更整洁/更漂亮的解决方案,我仍会给他们答案。