ORA-60死锁的实验
来源:互联网 发布:我的世界功能机java版 编辑:程序博客网 时间:2024/06/10 21:31
http://blog.csdn.net/bisal/article/details/17095531
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 name='c' where id=1;
1 row updated.
Session2:
SQL> update tbl_ora_60 set name='d' where id=2;
1 row updated.
Session1:
SQL> update tbl_ora_60 set name='e' where id=2;
hang住
Session2:
SQL> update tbl_ora_60 set name='f' where id=1;
hang住
此时,Session1:
SQL> update tbl_ora_60 set name='e' where id=2;
update tbl_ora_60 set name='e' 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 name='f' where id=1;
hang住
继续,Session1:
SQL> commit;
Commit complete.
Session2:
SQL> update tbl_ora_60 set name='f' 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执行相同。
0 0
- ORA-60死锁的实验
- ORA-60死锁的实验
- 一次ORA-60死锁故障的处理
- 死锁ora-60诊断
- oracle的死锁实验
- 自旋锁的死锁实验
- 死锁(ora-00060)以及死锁相关的知识点
- 死锁(ora-00060)以及死锁相关的知识点
- 一个常见的ORA-00060死锁现象
- ORA-00060死锁的产生及解决
- insert产生死锁dead lock的实验
- ORACLE死锁(ORA-00060)故障排查的一般性手法
- 主外键造成ORA-00060死锁问题的解决方案
- oracle ORA-00054:资源正忙和ORA-00060:检测到死锁的解决办法
- 实验三:预防进程死锁的银行家算法
- 操作系统实验六之死锁问题实验
- 关于“ORA-00060:等待资源时检测到死锁”问题的分析
- Oracle 表死锁处理 ora-00054
- Unity人物换装4(Instantiate)
- css伪类与伪元素
- 【数据结构】链表的原理及java实现
- TensorFlow 白皮书的翻译(未翻译完请绕行)
- 正则表达式
- ORA-60死锁的实验
- 欢迎使用CSDN-markdown编辑器
- Kafka与Logstash的数据采集对接 —— 看图说话,从运行机制到部署
- pca函数调用
- hadoop(伪)启动没有namenode的问题:connect to host levelhi port 22: Connection refused
- 努力给别人看,只是勤奋的最低境界
- draft
- create select
- 微服务之Eureka服务发现