检测SQLServer复制订阅进度

--检测复制订阅进度

--SQLSERVER2012

--创建链接服务器ReadServer,WriteServer,它们分别链接发布服务器、订阅服务器

--修改数据库名称

--在分发服务器执行

USE [distribution]
go


with 
cte_pub as 
(select 
ma.publisher_db,mp.publication_id,mp.publication,ma.article_id,t.name table_name,six.rows 
from [WriteServer].[DatdabaseName].sys.tables t
inner join [WriteServer].[DatdabaseName].sys.sysindexes six 
ON t.object_id=six.id  
INNER JOIN [distribution].dbo.MSarticles ma
ON  t.name=ma.article
INNER JOIN [distribution].dbo.MSpublications mp
ON ma.publication_id=mp.publication_id
where 1=1
and six.indid<=1
--AND t.name LIKE 'war%'--过滤发布表条件放在此更高效




),
cte_repl as 
(SELECT 
ma.publication_id,mp.publication,ma.article_id,t.name table_name,six.rows 
FROM [ReadServer].[DatdabaseName].sys.tables t
LEFT JOIN [ReadServer].[DatdabaseName].sys.sysindexes six
ON t.object_id=six.id
INNER JOIN [WriteServer].[distribution].dbo.MSarticles ma
ON t.name=ma.destination_object
INNER JOIN [distribution].dbo.MSpublications mp
ON mp.publication_id=ma.publication_id
INNER JOIN [ReadServer].[DatdabaseName].dbo.MSreplication_objects mo
ON mo.article = ma.article AND mo.publication=mp.publication
where 1=1
and six.indid<=1
and mo.object_name LIKE 'sp_MSins%'
--AND t.name LIKE 'war%'--过滤订阅表条件放在此更高效
)




select 
t1.publisher_db 发布数据库,t1.publication 发布名称,t1.article_id,t1.table_name 表名,t1.rows 发布数量 ,t2.rows 订阅数量,t1.rows-t2.rows 差异,GETDATE() 当前时间
from cte_pub t1
full join cte_repl t2
on t1.publication=t2.publication AND t1.article_id=t2.article_id
where 1=1
--AND t1.table_name LIKE 'fcc_%' --显示特定表
--AND t1.rows>0 AND t2.rows=0 --仅显示存在同步数据的
--AND t1.rows<>t2.rows --仅显示数据同步不一致的
ORDER by ABS(t1.rows-t2.rows) desc,t1.table_name

  

  

posted on 2018-12-16 16:20  donchen-c  阅读(442)  评论(0编辑  收藏  举报