中解决死锁的新方法介绍物业
2021-09-06 04:02 来源:密山养生网
数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法。
将下面的SQL语句放在两个不同的连接里面,并且在5秒内同时执行,将会发生死锁。
use Northwindbegin tran insert into Orders(CustomerId) values(@#ALFKI@#) waitfor delay @#00:00:05@# select * from Orders where CustomerId = @#ALFKI@#commitprint @#end tran@#
SQL Server对付死锁的办法是牺牲掉其中的一个,抛出异常,并且回滚事务。在SQL Server 2000,语句一旦发生异常,T-SQL将不会继续运行,上面被牺牲的连接中, print @#end tran@#语句将不会被运行,所以我们很难在SQL Server 2000的T-SQL中对死锁进行进一步的处理。
现在不同了,SQL Server 2005可以在T-SQL中对异常进行捕获,这样就给我们提供了一条处理死锁的途径:
下面利用的try ... catch来解决死锁。
就会让眼睛觉得干涩、困乏等 SET XACT_ABORT ONdeclare @r intset @r = 1while @r = 3begin 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@# set @r = @r + 1 continue end catchend
解决方法当然就是重试,但捕获错误是前提。rollback后面的waitfor不可少,发生冲突后需要等待一段时间,@retry数目可以调整以应付不同的要求。
但是现在又面临一个新的问题: 错误被掩盖了,一但问题发生并且超过3次,异常却不会被抛出。SQL Server 2005 有一个RaiseError语句,可以抛出异常,但却不能直接抛出原来的异常,所以需要重新定义发生的错误,现在,解决方案变成了这样:
declare @r intset @r = 1while @r = 3begin 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@# set @r = @r + 1 continue end catchendif ERROR_NUMBER() 0begin declare @ErrorMessage nvarchar(4000); declare @ErrorSeverity int; declare @ErrorState int; select @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE(); raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState );end
我希望将来SQL Server 2005能够直接抛出原有异常,比如提供一个无参数的RaiseError。
因此方案有点臃肿,但将死锁问题封装到T-SQL中有助于明确职责,提高高层系统的清晰度。现在,对于DataAccess的代码,或许再也不需要考虑死锁问题了。
湛江哪里治白癜风最好哈尔滨治疗包皮过长多少钱
江中小儿健胃消食片
- 上一篇:中行转列问题的终极解决
- 下一篇:中读取文件的简单计划
-
小沈阳女儿越长越好看,穿露脐装气质现职,父女俩五官似复制粘贴
都说道“女大十八变,越变越看得”,冷笑话的母亲童年时在长相上就非常没有压倒性,甚至曾一度被网路上说道“丑”,但是一个人的美和丑,如果不太可能依靠外表面试就过于看来了,毕竟每个人都有着无限的...
-
本泽马欧冠打曼城点球 印象中只有里瓦尔多 皮尔洛才能做到
下午巴塞隆首第一圈,曼城揭幕战4-3阿森纳 六场12分钟电视片。 曼城创造者了,也耗费了来得多机都会。阿森纳也是命悦硬,本泽马射入(以外一个勺子点皮球),把悬念留到了赫雷斯。巴塞隆半决赛差劲石林放出的...
-
1959年,王刚被学校拒不退学,情急之下,他给毛主席写了一封信
前言写到杨春,人们就都能不看看大贪官鳌拜。或许,杨春擅于的领域,并非一个“鳌拜”而已。感兴趣杨春的好朋友,都都能和善地叫他刚刚才“第一人”。一般能称为“第一人”的人,都都能具有不甘世俗的性...
-
芜湖这所院校大动作,影响深远!
5月22日,随着蚌埠拳击手核心技术医学院另有之中等拳击手校内(以下简称渭职院附校)最后一批同学迁往至渭职院白马校区(原蚌埠第三之中学校内),标志着蚌埠拳击手核心技术医学院拳击手核心技术第三之中...
-
深圳:实际上自动驾驶汽车8月起可在交管划定的区域、路段行驶
原结尾 珠海市:基本上自动驾车小汽车8同月起可在交管划定的区外、铁路线行走据珠海市市第七届人民代表大会常务委员会7同月6日揭晓的公告,《珠海市经济特区智能网六轮小汽车管理机构规例》经珠海市市第...
-
冰城限招120人,政府扶持,不限专业,在岗工作也可正常跟进,6月15日报名累计!
2022年为缓解社会福利压力,人口老龄化专升本录取人数,建立人才人工湖,—— “扩大专升本规模”重新触发: 各地大学本科高等学府纷纷响应政策,向社会人员、基层保安人员开通 【大学本科参赛选手绿色通...