诊断ORA-00060 Deadlock Detected错误

本文详细介绍了Oracle数据库中死锁的概念,通过一个实例展示了死锁的发生,并提供了死锁图的解读方法。文章还探讨了如何避免死锁,以及在发生死锁时如何获取诊断信息,包括从alert.log文件和跟踪文件中提取关键数据。最后,讨论了不同类型的锁及其可能引发死锁的模式。
摘要由CSDN通过智能技术生成

什么是死锁
当一个会话A想要获得另一个会话B所持有的资源,但是会话B也想要获得会话A所持有的资源时就会出现死锁.

下面将演示一个死锁的例子:

jy@JINGYONG> insert into test_jy values(1,'First');

已创建 1 行。

jy@JINGYONG> insert into test_jy values(2,'Second');

已创建 1 行。

jy@JINGYONG> commit;

提交完成。

jy@JINGYONG> select rowid,num,txt from test_jy;

ROWID                     NUM TXT
------------------ ---------- ----------
AAASNsAAEAAAAIlAAA          1 First
AAASNsAAEAAAAIlAAB          2 Second

session#1:

SQL> update test_jy set txt='session1' where num=1;

1 row updated.

session#2:
jy@JINGYONG> update test_jy set txt='session2' where num=2;

已更新 1 行。

jy@JINGYONG> update test_jy set txt='session2' where num=1;

现在session#2正等待session#1所持有的TX锁

session#1:

SQL> update test_jy set txt='session1' where num=2;

现在session#1正等待这一行的TX锁,这个锁被session#2所持有,然而session#2也正等待session#1这就形成了死锁,当出现死锁时一个会话会抛出一个ORA-00060错误.
session#2:

       *
第 1 行出现错误:
ORA-00060: 等待资源时检测到死锁

这时session#1仍然被锁直接到session#2提交或回滚出错的ORA-00060的语句它只会回滚当前的语句而不是整个事务.

诊断信息由ora-00060提供
ora-00060错误通常会将错误信息写入alert.log文件并同时创建一个跟踪文件.跟踪文件会根据创建跟踪文件的进程的类型写入user_dump_dest或background_dump_dest目录中.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值