WITH ProcessCTE(blocked) AS

(

SELECT blocked  from (SELECT TEXT as tt,AA.* FROM sys.sysprocesses AA

    CROSS APPLY sys.dm_exec_sql_text(AA.sql_handle)) as a

    where tt like '%XXXX%' and tt not like '%TEXT as tt,%' and blocked>0

 

)

SELECT a.*

  FROM (

   SELECT TEXT,AA.* FROM sys.sysprocesses AA

    CROSS APPLY sys.dm_exec_sql_text(AA.sql_handle)

       ) a

  JOIN ProcessCTE bucte WITH(NOLOCK)

    ON bucte.blocked=a.spid

 ORDER BY a.blocked

------------------

现象:
存储异常后导致分发实例异常(分发服务器重启或分发实例在集群中漂移)
造成数据库订阅丢失(错乱)



查看分发服务器上的JOB,可以发现如下情况

此时可以判断,第一个JOB即为异常JOB,需要清理后重新添加.
处理步骤:
注:下面的步骤不可以颠倒,否则将出现无法删除订阅的情况(如果出现,需要使用SQL在发布数据库上执行来删除订阅)
1.删除订阅



2.在分发数据库中执行如下SQL
/****** Script for SelectTopNRows command from SSMS ******/
SELECT *
FROM [dbo].[MSdistribution_agents]
where publication = '分发名'
order by name
找到刚刚删除的订阅的名称对应的代理ID,然后执行如下SQL进行删除
delete from [dbo].[MSdistribution_agents] where publication = '分发名' and id = @id
3.在分发服务器上删除刚刚检查到的异常JOB

上述步骤完成后复制监视器中恢复正常.


最后将刚刚删除的订阅使用UI界面方式添加上并初始化后同步即可.