我目前有一个重要的 TSQL 作业,可能每周挂起一次。
它将数据从一个数据库移动到另一个数据库。
它在一天中无限期地每 5 分钟运行一次。
偶尔,它通常会在凌晨 1 点左右挂起。当我说挂起时,我的意思是它只是在凌晨 1 点被抓到,它永远不会依次完成当前的预定运行,它永远不会进入下一个预定的运行。
为了让它停止,我必须停止工作。禁用作业。终止关联的 SPID。重新启用并重新启动作业。有时这会使其运行,但有时我必须重新启动 SQL 代理本身。
对于为什么会在数据方面发生这种情况,确实没有节奏或原因。有时它会持续数周而不会出现问题,有时它会每周发生一次或两次。
我只是想知道是否有办法让这项工作在早上定期重新启动,这样它就不会挂起。我假设其他人以前遇到过这样的问题。非常感谢这里的任何方向。
数据库中没有阻塞。我不打算解决阻塞问题。寻找一种方法来确定作业是否挂起并重新启动它或类似的东西。
我sp_who2
定期进行审查,从未发现这项特定工作有任何阻碍。
我过去处理过一些长期运行的工作,我发现识别它们的最好方法是运行一个单独的工作来检查这类事情。Thomas LaRock 编写了一个很好的脚本来执行此操作,您可以将其修改为通过电子邮件发送给您,或者如果您愿意,也可以让它停止工作。就我而言,这项工作实际上只是挂起,但它并没有被阻止,事实上在很多情况下它什么也没做。但由于无论出于何种原因,它永远不会停止工作,它永远不会运行下一个计划。
如何:查找当前运行的长时间 SQL 代理作业
我已经使用了他的代码,并为自己添加了一封电子邮件通知,效果很好。只要您知道长期工作的门槛,或者即使您只是想查看单个工作,这应该可以为您完成。让您的代码发现它运行时间过长然后在同一个脚本调用中很容易
这将允许下一个时间表从中断的地方开始。我发现我喜欢看看是否还有其他事情发生,而不是仅仅停止工作,但无论哪种方式都可以。
祝你好运。