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界面方式添加上并初始化后同步即可.