有时我得到这种异常不是很忙的sql服务器:
Transaction (Process ID 57) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. Line number: 1 Error Number: 1205 Procedure: Server name: P01 Error Source: .Net sqlClient Data Provider Error State: 47
我无法再现它.我试图在同一时间从不同的客户端运行多个查询,但没有显示.
在程序或内部触发器中发生这种问题的最佳方法是什么?我的意思是,如何重新运行交易?
当由触发器调用的过程中发生异常时,如何执行此操作,该过程由某些过程(即:procedure01 – > insert – > trigger – > procedure02!)进行的插入调用.
解决方法
我建议你从两个角度来解决问题.
> Trap or Catch死锁错误,以便您可以重新运行由sql Server数据库引擎选择为死锁受害者的事务.
找出导致死锁事件的原因.
您可以通过以下两种方式之一执行此操作:运行sql Server Profiler跟踪以捕获并记录死锁事件,或者可以启用一些将会将死锁事件的详细信息记录到sql Server错误日志的SQL Server Trace Flags.
在绝大多数情况下,您可以识别死锁事件的原因,并通过数据库模式的结构性更改或对死锁事件负责的逻辑更改进行修复.
进一步阅读请看:
> How to track down Deadlocks Using SQL Server Profiler
> Minimizing Deadlocks
> Detecting and Ending Deadlocks
我希望我已经回答了你的问题,但是让我知道,如果我能以任何方式进一步帮助你.