我运行 SQL Server 2012。
我有一项每晚运行的维护工作。在维护结束时,我做了一些清理并调用它:
Begin try
Exec msdb.dbo.sysmail_delete_log_sp @logged_before = '20160613';
EXECUTE msdb.dbo.sysmail_delete_mailitems_sp @sent_before = '20160613';
End try
Begin catch
-- Do some log error
End catch
我将事务放在 Try/Catch 中,但它似乎不起作用。我不断收到此错误:
“错误 1205,严重性 13,级别 18:事务(进程 ID 112)在锁定资源上与另一个进程发生死锁,并已被选为死锁牺牲品。重新运行事务。”
如果我手动运行事务,它运行得很快而且我不会收到任何错误。
任何想法为什么我不断收到此错误或如何捕获它以免我的工作失败?
所以我对死锁图没有任何运气。似乎没有出现在我的 SQL 日志中。但是,我确实发现另一个工作已安排与我的工作同时运行,并且在我的工作试图清理邮件历史记录的同时进行备份和发送电子邮件。所以改变其他工作的时间表解决了我的问题!