频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

10.4.3 死锁

作者: 韩思捷编著 出处:电子工业出版社  2008-06-03 14:57    砖    好    评论   进入论坛
阅读提示:《Oracle数据库技术实用详解:教你如何成为10g OCP》系统全面地介绍了Oracle 10g数据库的结构、管理和优化,内容涵盖整个10g OCP的考试范围,包括Oracle 10g数据库的体系架构、存储结构、网络服务、备份与恢复、闪回(flashback)管理、资源管理、调度管理、自动存储管理(ASM)、自动化性能监控与调优等;既着重介绍了在实际工作中需要用到的管理知识,又兼顾了OCP考试所涉及的考点。这一节讲的是死锁。

10.4.3  死锁

假设当前存在两个session(以A和C来表示),如果A持有C正在申请的锁定,同时C也持有A正在申请的锁定时,这时发生死锁现象。死锁是典型的“双输”情况,如果任其发展,则会出现A和C这两个session正在执行的事务都无法结束的现象。因此,在Oracle数据库中,造成死锁的那个DML语句会被撤销。死锁总是由于应用程序设计不合理引起的。

我们来看一个例子,先启动一个session,发出如下的语句:

SQL> select sid from v$mystat where rownum=1;
SID
----------
159
SQL> update employees set last_name=last_name||'a'
where employee_id=100;
1 row updated.

我们再启动一个session:

SQL> select sid from v$mystat where rownum=1;
SID
----------
158
SQL> update employees set last_name=last_name||'b' where
employee_id=101;
1 row updated.

然后,我们在159号session中,更新employee_id为101的记录:

SQL> update employees set last_name=last_name||'c' 
where employee_id=101;

毫无疑问,由于该记录上的锁定正由158号session持有,因此159号session进入队列进行等待。然后我们在158号session上更新employee_id为100的记录:

SQL> update employees set last_name=last_name||'d' where employee_id=100;

这时,158号和159号session各自持有对方申请的锁定,因此出现死锁现象。Oracle会自动监测该现象,一旦发现该现象,我们会发现159号session的更新被自动中断:

SQL> update employees set last_name=last_name||'c' where
employee_id=101;
update employees set last_name=last_name||'c' where employee_id=101
*
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource

同时会在alert<SID>.log文件中记录该事件:

Sat Dec 15 01:19:20 2007
ORA-00060: Deadlock detected. More info in file /u01/app/
oracle/admin/ora10g/udump/ora10g_ ora_3813.trc.

也就是说,当某个session的事务引起了死锁时,Oracle会自动将阻塞该事务的其他事务中相应的DML语句撤销,而阻塞该事务的其他事务中的其他DML语句并没有撤销。表现在上面的例子中,也就是159号session中更新employee_id为101的语句被撤销了,但是最早发出的更新employee_id为100的语句并没有被撤销。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节
专题
JavaScript王者归来
精通SQL——结构化查询语言详解
C#和.NET 3.0第一步:适用Visual Studio 2005与Visual Studio 2008
MySQL 数据库优化手册
绿色IT人健康生存手册
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
技术人求职简历完备手册
技术人求职简历完备手册
开源虚拟化技术Xen
开源虚拟化技术Xen
Windows Server 2008专题
Windows Server 2008专题
· Windows Server 2008专..
· 隐私保护技术探讨
· 绿色IT人健康生存手册
· 网络工程师职业规划与..
· 杀毒软件评测专题
· 访问控制列表(ACL)介绍
· Vista SP1对决XP SP3
· 华为员工自杀频频拷问..
· 2008中国互联网大会
· 微软出价446亿美元收购..
· 勇闯IT培训黑色围城
· CISSP认证成长之路
· 解析35岁技术人的价值..
· LAMP技术精解
· AMD Phenom三核处理器..
· 充电计划之热门IT认证..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SOA 面向服务架构
SOA 面向服务架构
· SOA 面向服务架构
· SQL Server 2008/2005..
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Apache技术专题
· 国际文档格式标准开战
· 路由器设置与口令恢复
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
· 了解统一威胁管理(UTM)..
· 专题:AIX操作系统管理..
· 访问控制列表(ACL)介绍
· 反垃圾邮件技术应用
· ASP.NET 2.0基础开发指..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SQL Server入门到精通
SQL Server入门到精通
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· 三层交换技术专题
· Apache技术专题
· 企业数据恢复指南
· 路由器设置与口令恢复
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用
· 访问控制列表(ACL)介绍
· PHP开发应用手册
· 专题:AIX操作系统管理..
· 交换机故障解决指南
· 三层交换技术专题