我希望能够检查SQL Server 2008 T-SQL中发布和订阅的状态。我希望能够确定它是否可以,最后一次成功的时间,同步等。这可能吗?如何通过T-SQL检查SQL复制状态?
13
A
回答
27
我知道这是有点晚了....
SELECT
(CASE
WHEN mdh.runstatus = '1' THEN 'Start - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '2' THEN 'Succeed - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '3' THEN 'InProgress - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '4' THEN 'Idle - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '5' THEN 'Retry - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '6' THEN 'Fail - '+cast(mdh.runstatus as varchar)
ELSE CAST(mdh.runstatus AS VARCHAR)
END) [Run Status],
mda.subscriber_db [Subscriber DB],
mda.publication [PUB Name],
right(left(mda.name,LEN(mda.name)-(len(mda.id)+1)), LEN(left(mda.name,LEN(mda.name)-(len(mda.id)+1)))-(10+len(mda.publisher_db)+(case when mda.publisher_db='ALL' then 1 else LEN(mda.publication)+2 end))) [SUBSCRIBER],
CONVERT(VARCHAR(25),mdh.[time]) [LastSynchronized],
und.UndelivCmdsInDistDB [UndistCom],
mdh.comments [Comments],
'select * from distribution.dbo.msrepl_errors (nolock) where id = ' + CAST(mdh.error_id AS VARCHAR(8)) [Query More Info],
mdh.xact_seqno [SEQ_NO],
(CASE
WHEN mda.subscription_type = '0' THEN 'Push'
WHEN mda.subscription_type = '1' THEN 'Pull'
WHEN mda.subscription_type = '2' THEN 'Anonymous'
ELSE CAST(mda.subscription_type AS VARCHAR)
END) [SUB Type],
mda.publisher_db+' - '+CAST(mda.publisher_database_id as varchar) [Publisher DB],
mda.name [Pub - DB - Publication - SUB - AgentID]
FROM distribution.dbo.MSdistribution_agents mda
LEFT JOIN distribution.dbo.MSdistribution_history mdh ON mdh.agent_id = mda.id
JOIN
(SELECT s.agent_id, MaxAgentValue.[time], SUM(CASE WHEN xact_seqno > MaxAgentValue.maxseq THEN 1 ELSE 0 END) AS UndelivCmdsInDistDB
FROM distribution.dbo.MSrepl_commands t (NOLOCK)
JOIN distribution.dbo.MSsubscriptions AS s (NOLOCK) ON (t.article_id = s.article_id AND t.publisher_database_id=s.publisher_database_id)
JOIN
(SELECT hist.agent_id, MAX(hist.[time]) AS [time], h.maxseq
FROM distribution.dbo.MSdistribution_history hist (NOLOCK)
JOIN (SELECT agent_id,ISNULL(MAX(xact_seqno),0x0) AS maxseq
FROM distribution.dbo.MSdistribution_history (NOLOCK)
GROUP BY agent_id) AS h
ON (hist.agent_id=h.agent_id AND h.maxseq=hist.xact_seqno)
GROUP BY hist.agent_id, h.maxseq
) AS MaxAgentValue
ON MaxAgentValue.agent_id = s.agent_id
GROUP BY s.agent_id, MaxAgentValue.[time]
) und
ON mda.id = und.agent_id AND und.[time] = mdh.[time]
where mda.subscriber_db<>'virtual' -- created when your publication has the immediate_sync property set to true. This property dictates whether snapshot is available all the time for new subscriptions to be initialized. This affects the cleanup behavior of transactional replication. If this property is set to true, the transactions will be retained for max retention period instead of it getting cleaned up as soon as all the subscriptions got the change.
--and mdh.runstatus='6' --Fail
--and mdh.runstatus<>'2' --Succeed
order by mdh.[time]
2
要检查出版物或订阅状态,你可以使用简单的工具SQL Server Replication Explorer
4
老的文章,但增加了对其他 - 下面的存储过程将给你你需要的东西:
- sp_replmonitorhelppublication(https://msdn.microsoft.com/en-us/library/ms186304.aspx)
它允许您查看状态以及其他信息全部复制出版物的分销商(分发数据库上运行它)
相关问题
- 1. 检查postgres复制状态
- 2. 如何检查/通过设置状态
- 3. 如何复制手动(未)检查复选框的状态?
- 4. SQL Server FTI:如何检查表状态?
- 5. TSQL查找复制
- 6. 如何:通过C#获取合并复制状态
- 7. 如何通过SQL服务器远程检查应用程序池状态
- 8. 如何通过3G连接检查互联网连接状态?
- 9. 如何通过终端检查TRIM状态
- 10. 如何预防的OutOfMemoryError通过检查堆状态
- 11. 如何通过PHP检查JavaScript是否处于活动状态?
- 12. 如何检查namenode状态?
- 13. 如何通过spark-sql复制表格
- 14. sql - 在sql中双重检查状态
- 15. 如何检查动态创建的复选框状态
- 16. 检查在线状态,例如通过pinging
- 17. 如何通过LINQ或TSQL
- 18. 如何通过jQuery检查值检查复选框属性值?
- 19. 如何将检查状态设置为false如果检查状态不确定
- 20. Android如何保存3种不同检查状态的复选框状态
- 21. 监控复选框的检查状态
- 22. 检查SQL Server作业的状态
- 23. 检查SQL Server 2008文件流状态
- 24. 检查位状态的二进制
- 25. 检查capsLock状态
- 26. 检查GetStreamAsync状态
- 27. unix状态检查!
- 28. 检查AutoResetEvent状态
- 29. 如何检查更改事件的复选框状态
- 30. 李输入复选框:如何获得检查状态javascript
这是有一个梦幻般的查询! – 2015-11-19 14:25:28