SQL Server 疑难解答复制和长时间运行的 fn_dblog 查询

sla*_*man 5 replication sql-server-2008 transaction-log transactional-replication

我试图让(拉)事务复制再次为订阅者工作。

目前,在复制监视器中,我在发布者到分发者选项卡和分发者到订阅者选项卡中看到消息。

在订阅者历史记录的分发者中,我看到“发布 'XX' 的并发快照不可用”。在发布者到分发者的历史记录中,我看到日志读取器代理正在初始化,然后等待服务器的响应(每 5 分钟再次记录一次消息)。

最终执行sp_replcmds失败。

我认为可能有许多未复制的事务导致日志读取器代理挂起。遵循LogReader 超时故障排除

我跑了dbcc opentran然后试图跑

select  [Transaction ID], count([Transaction ID]) as 'Count log entries'
from::fn_dblog('42006:31381:2',null) 
where [Description] = 'REPLICATE'
group by [Transaction ID]
Run Code Online (Sandbox Code Playgroud)

此查询在超过 40 分钟后未返回任何结果。此外,当我刚跑步SELECT count(*) FROM ::fn_dblog(NULL, NULL)时,很长一段时间(20 分钟)后我都没有得到结果。

我开始认为我的事务日志的大小有问题,或者某种损坏,或者什么。

任何帮助将不胜感激。

小智 1

如果 fn_dblog 挂起,您可以尝试 ApexSQL、RedGate 或 Idera 的一些第三方工具。或者您可以尝试备份事务日志文件并使用 fn_dump_dblog 只是为了排除联机事务日志的问题。您可以在这篇DBA 帖子中找到更多信息