SQL Server 2005中解决死锁方法

 
数据库操作的死锁是不可避免的,本文最没有说明死锁是如何产生的,重点在于解决死锁,通过SQL Server  2005 , 现在似乎有了一种新的解决办法。

将下面的SQL语句放在两个不同的连接里面,并且在5秒内同时执行,将会发生死锁。
use  Northwind 
begin   tran  
    
insert   into  Orders(CustomerId)  values ( ' ALFKI '
    
waitfor  delay  ' 00:00:05 '   -- 推迟到5秒钟后执行
     select   *   from  Orders  where  CustomerId  =   ' ALFKI '  
commit  
print   ' commit '  
SQL Server对付死锁的办法是牺牲掉其中的一个,抛出异常,并且回滚事务。在SQL Server 
2000 ,语句一旦发生异常,T - SQL将不会继续运行,上面被牺牲的连接中,  print   ' commit '  语句将不会被运行,所以我们很难在SQL Server 2000的T - SQL中对死锁进行进一步的处理。
现在不同了,SQL Server 2005可以在T
- SQL中对异常进行捕获,这样就给我们提供了一条处理死锁的途径:
下面利用的try  catch来解决死锁。
SET  XACT_ABORT  ON  
declare   @s   int  
set   @s   =   1  
while   @s   <=   3  
begin  
    
begin   tran       
    
begin  try        
        
insert   into  Orders(CustomerId)  values ( ' ALFKI '
        
waitfor  delay  ' 00:00:05 '  
        
select   *   from  Orders  where  CustomerId  =   ' ALFKI '  
         
        
commit  
        
break  
    
end  try 
         
    
begin  catch 
        
rollback  
        
waitfor  delay  ' 00:00:03 '   -- 推迟到3秒钟后执行
         set   @s   =   @s   +   1  
        
continue  
    
end  catch 
end  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值