文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络技术服务器用TRY/CATCH解决SQL2005的死锁
精品推荐
特别推荐
·代理服务器使用原理与选购细则
·统计分析Web服务器日志
·反恐精英CS服务器架设详解
·服务器常见故障的诊断与解决
·服务器性能评估的实战技巧
·Windows 2000 Server网络组件简介
·入门到精通:负载均衡技术全攻略
·教你如何用双SATA硬盘组建RAID系统
·分析并清除web服务器上的网页木马
·安装IIS后出现500错误的解决办法
·Apache下服务器虚拟主机的设置
·怎样选择合适的服务器规避风险
·服务器虚拟化的十大必须考虑因素
·谨慎:整合服务器时易犯十个错误
·IIS虚拟主机网站防木马权限设置安全配置整理
·服务器常见软件故障分析及解决
·浅谈如何为服务器安全地进行升级
·必须了解的五个服务器基础问题
·电影服务器协议、架设及防范配置
·服务器端口大全
热点TOP10
·图文详解 Windows 2003服务器集群安装
·Dell PowerEdge 2950 服务器 Windows 2003安装手册
·解决与HTTP 500 – 内部服务器错误错误信息有关的问题
·Helix流媒体服务器架设及RMVB制作教程
·板载RAID功能制作磁盘阵列并安装操作系统
·安装IIS后出现500错误的解决办法
·何谓HTTP 500内部服务器错误
·图文教程 Windows 2003群集服务配置
·Serv-U配置图文教程(1)
·IIS安装配置全攻略
·网络流量监控器mrtg
·教你如何用双SATA硬盘组建RAID系统
·Resin官方中文资料
·反恐精英CS服务器架设详解
·部署 Microsoft SQL Server 2005 群集
·Serv-U配置图文教程(2)
·Dell PowerEdge 1950/29x0 Red Hat Linux 4.0 安装手册
·Apache URL重定向指南
·个人电脑变网站服务器全面解决方案
·入门到精通:负载均衡技术全攻略

用TRY/CATCH解决SQL2005的死锁

日期:2007年5月9日 作者: 查看:[大字体 中字体 小字体]


  让我们从这样一个示例开始说起,它在 SQL Server 2000 和 2005 中都能引起死锁。在本文中,我使用 SQL Server 2005 的最新 CTP(社区技术预览,Community Technology Preview)版本,SQL Server 2005 Beta 2(7 月发布)也同样适用。如果您没有 Beta 2 或最新的 CTP 版本,请下载 SQL Server 2005 Express 的最新版本,用它来进行试验。

  可能发生的死锁情况有很多,[参阅http://msdn.microsoft.com/library/default.asp?url=/library/en-us/acdata/ac_8_con_7a_3xrf.asp以及死锁文章树中的后续文章。— 编者 ],但最有趣、最微妙的是那些关于阅读器和编写器互相阻塞的死锁。以下代码在 pubs 数据库中就产生了这样一个死锁。(您可以在 SQL Server 2000 的两个 Query Analyzer 窗口中或 SQL Server 2005 的两个 Management Studio queries 中并列运行这段代码。)在其中一个窗口中的代码正文前面添加下列语句:

-- Window 1 header
DECLARE @au_id varchar(11), @au_lname varchar(40)
SELECT @au_id = '111-11-1111', @au_lname = 'test1'

  在第二个窗口中添加下列语句,进行第二次连接:

-- Window 2 header
DECLARE @au_id varchar(11), @au_lname varchar(40)
SELECT @au_id = '111-11-1112', @au_lname = 'test2'

  在两个窗口中都使用下列语句作为代码正文:

-- Body for both connections:
BEGIN TRANSACTION
INSERT Authors VALUES 
  (@au_id, @au_lname, '', '', '', '', '', '11111', 0)
WAITFOR DELAY '00:00:05'
SELECT *
  FROM authors
  WHERE au_lname LIKE 'Test%'
COMMIT

  在第三个窗口中运行下列语句,确保 authors 表格中没有任何包含以下 id 的数据:

DELETE FROM authors WHERE au_id = '111-11-1111'
DELETE FROM authors WHERE au_id = '111-11-1112'

  在 5 秒钟内同时执行窗口 1 和 窗口 2。因为每个窗口都要等待至少 5 秒钟的时间才能发出 SELECT 语句,所有每个连接都将完成 INSERT 操作,这样就保证了两个窗口中的 INSERT 操作在各自的 SELECT 语句发布前就已经完成了。每个窗口中的 SELECT 语句都尝试读取 authors 表格中的所有数据,查找 au_lname 字段值中类似“Test%”格式的数据。因此,两个窗口中的 SELECT 语句都将尝试读取各自连接中的插入数据 — 也读取对方连接中的插入数据。

  read COMMITTED 隔离级别通过发布共享锁确保 SELECT 语句永远不读取未提交的数据。对于同一个资源,共享锁与排它锁互不兼容,请求者在发布共享锁之前必须等待排它锁释放。每个连接对于插入的数据都设置了排它锁,因此尝试读取对方插入数据的 SELECT 语句将试图解除插入数据的共享锁,但它会被阻塞。两个连接将互相阻塞,从而形成一个死锁。SQL Server 的锁定管理器检测到死锁时,将中止其中的一个批处理,回滚它的事务,释放它的阻塞锁,以便其他事务能够完成。作为死锁牺牲品的事务将回滚,其他事务则将成功完成。

如何使用 TRY/CATCH 语句避免死锁


  现在,让我们来使用 TRY/CATCH 语句修改代码正文。(对于本示例,需要以 SQL Server 2005 版本运行代码。)使用 TRY/CATCH 时,操作代码和错误处理代码是分开的。您应该将执行一个操作的代码放在 TRY 语句块中,将错误处理代码放在 CATCH 语句块中。如果 TRY 语句块中的代码执行失败,代码执行将跳到 CATCH 语句块。(除了那些防碍整个批处理运行的错误(如,丢失对象),该方法几乎适用于所有的错误。)

  以下示例使用 TRY/CATCH 语句对前面使用的代码进行了改写。代码标题相同,但是代码正文不同:

BEGIN TRANSACTION
BEGIN TRY
  INSERT Authors VALUES 
  (@au_id, @au_lname, '', '', '', '', '', '11111', 0)
  WAITFOR DELAY '00:00:05'
  SELECT COUNT(*)  FROM Authors 
  COMMIT
END TRY
BEGIN CATCH
  SELECT ERROR_NUMBER() AS ErrorNumber
  ROLLBACK
END CATCH;
SELECT @@TRANCOUNT AS '@@Trancount'


[1] [2] 下一页 




上一篇:建立企业自己的Web网站

下一篇:部署 Microsoft SQL Server 2005 群集

用TRY/CATCH解决SQL2005的死锁 相关文章:
·XP系统运行慢?小编自用7招解决
·不用重装XP系统就可以解决全部故障
·全面解决Generic host process for win32 services遇到问题需要关闭
·开机提示reboot and select proper boot device or insert boot Media in selected boot device的解决
·笔记本电脑无线上网解决方案大比拼
·中小企业整体网络安全解决方案解析
·解决与HTTP 500 – 内部服务器错误错误信息有关的问题
·网络拓扑图--解决方案
·安装IIS后出现500错误的解决办法
·能上QQ却打不开网页的原因及解决办法
用TRY/CATCH解决SQL2005的死锁 相关软件:
·网络安全cisco解决方案
·Adobe Acrober 5.0电子表单解决方案白皮书
·Cisco 网络安全解决方案
·罗兰贝格的财务解决方按(实战管理咨询安例)
·Asp.net组件工具包VB.net web解决方案
·挑战黑客:网络安全的最终解决方案(PDF)(成为黑客高手必看之书)
·虚拟专网:技术与解决方案
·生死锁
·解决杀毒软件并存后产生的错误
·StarSuit商务办公全方位解决方案八套件 V6.0.7 B/S 不限网络版

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot