Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是否可以在任何地方查询复制是否连续?_Sql Server_Sql Server 2008_Sql Server 2005_Database Replication_Merge Replication - Fatal编程技术网

Sql server 是否可以在任何地方查询复制是否连续?

Sql server 是否可以在任何地方查询复制是否连续?,sql-server,sql-server-2008,sql-server-2005,database-replication,merge-replication,Sql Server,Sql Server 2008,Sql Server 2005,Database Replication,Merge Replication,我能否在SQL Server数据库服务器上的发行版或msdb数据库中找到复制是否连续?(2005年和2008年) 背景: 我正在制作一个复制监视系统,当复制在X时间内未成功合并时,它将(通过电子邮件)发出警报。为此,我定期查询分发版数据库的MSreplication\u monitordata和MSmerge\u会话表。 为了测试复制是否已超过其警报时间,我对MSreplication\u monitordata中的每个条目执行以下操作,以查看上次成功复制的时间: 选择前1个结束时间 从MSme

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

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

选择前1个结束时间
从MSmerge_会话
其中runstatus=2,agent_id=@AgentId
按结束时间说明订购
runstatus=2个过滤器,仅用于“完成”状态()

问题是,连续复制只有一个
MSmerge\u sessions
条目不断更新其结束时间,但其状态为3,这意味着“正在进行”。我不能只测试这一点,因为这将返回非连续复制会话,在完成之前可能会失败

我尝试查看
MSmerge\u sessions.current\u phase\u id
列是否有用,但它没有文档记录,我无法推断它的含义。
我还尝试了
msdb
数据库,因为复制作业记录保存在那里(在
sysjobs
表中)。
sysjobschedules
表似乎很有希望,其中一些
next\u run\u date
next\u run\u time
字段为0,但我无法找到如何将其链接到
sysjobs
好的,因此这并不像我希望的那样漂亮,但这里是:

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
我通过绝望的网络搜索找到的。 这假设字符串匹配不区分大小写

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