ORA-60死锁的实验

php中文网
发布: 2016-06-07 17:33:59
原创
1237人浏览过

ORA-60死锁的实验 创建表: SQLgt; create table tbl_ora_60 (id number(5),name varchar2(5));SQLgt; insert into tbl_ora

ora-60死锁的实验

 

创建表:

SQL> create table tbl_ora_60 (
id number(5),
name varchar2(5)
);

SQL> insert into tbl_ora_60 values(1, 'a');
1 row created.

SQL> insert into tbl_ora_60 values(2, 'b');
1 row created.

SQL> commit;
Commit complete.

SQL> select * from tbl_ora_60;
ID NAME
---------- -----
1 a
2 b

实验开始
Session1:
SQL> update tbl_ora_60 set where id=1;
1 row updated.

Session2:
SQL> update tbl_ora_60 set where id=2;
1 row updated.

Session1:
SQL> update tbl_ora_60 set where id=2;
hang住

Session2:
SQL> update tbl_ora_60 set where id=1;
hang住

此时,Session1:
SQL> update tbl_ora_60 set where id=2;
update tbl_ora_60 set where id=2
*
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource

说明:
Session1 Session2
获取id=1的资源锁
获取id=2的资源锁
等待id=2的资源锁
等待id=1的资源锁
id=2的SQL报ORA-60,自动rollback

1、因为id=2的资源锁是Session2先获取的,因此Oracle会自动rollback产生死锁时后需要资源锁的SQL,Session1的更新id=2操作被rollback。
2、从中可以发现,真正报ORA-60错误的SQL获取的资源(此例中id=2),并不是触发死锁产生的那个资源(此例中id=1),此例用的是同一个表的不同行,,对不同表的相同行也如此,也可以解释之前夜维出现ORA-60时显示的SQL之间表是不同的原因,因为夜维执行的某个表更新与当前应用执行的某个表更新之间存在互锁的情况,因此可能导致夜维SQL报ORA-60或应用报ORA-60的错误。


此时,Session1:
SQL> select * from tbl_ora_60;
ID NAME
---------- -----
1 c
2 b
说明:此处可以证明产生报错后,Oracle自动执行的rollback操作是基于单条SQL,不是整个事务的,所以这里只有id=2的记录被rollback,id=1的执行仍正常

Session2:
SQL> update tbl_ora_60 set where id=1;
hang住

继续,Session1:
SQL> commit;
Commit complete.

Session2:
SQL> update tbl_ora_60 set where id=1;
1 row updated.

Session1:
SQL> select * from tbl_ora_60;
ID NAME
---------- -----
1 c
2 b
只有id=1更新成功。

Session2:
SQL> select * from tbl_ora_60;
ID NAME
---------- -----
1 f
2 d
id=1和id=2都更新成功,但未COMMIT。

SQL> commit;
Commit complete.

Session1:
SQL> select * from tbl_ora_60;
ID NAME
---------- -----
1 f
2 d
因Session2执行COMMIT,提交更新,此处显示与Session执行相同。

相关阅读:

ORA-01172、ORA-01151错误处理

ORA-00600 [2662]错误解决

Delphi 实例精选全掌握 CHM
Delphi 实例精选全掌握 CHM

来自万一的DELPHI编程博客,精品经验和实战的结晶,感谢万一的无私奉献,相信对DELPHI编程的朋友绝对有用处。CHM内的大部分源码在D7下全部编译通过,而且很少使用第三方控件,是学习的精品。 注:如果电子书不能正常显示,需要点击电子书“属性”->“解除锁定”就可以了。

Delphi 实例精选全掌握 CHM 0
查看详情 Delphi 实例精选全掌握 CHM

ORA-01078 和 LRM-00109 报错解决方法

ORA-00471 处理方法笔记

ORA-00314,redolog 损坏,或丢失处理方法

ORA-00257 归档日志过大导致无法存储的解决办法

linux

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号