加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle数据表中的死锁情况解决方法

发布时间:2020-12-12 17:02:44 所属栏目:百科 来源:网络整理
导读:在进行数据库管理的过程中,经常会出现数据表被用户的一些不合理操作而导致表被锁定的情况,以下主要介绍如何查找哪些表被哪个用户所锁定,以及如何解除锁定: 1.查找被锁定的表: 如果想知道具体是哪个进程阻塞了哪个进程,可用以下语句查看: 或 0 and a.id1 = b.

在进行数据库管理的过程中,经常会出现数据表被用户的一些不合理操作而导致表被锁定的情况,以下主要介绍如何查找哪些表被哪个用户所锁定,以及如何解除锁定:
1.查找被锁定的表:

2016121172119573.png (729×142)

如果想知道具体是哪个进程阻塞了哪个进程,可用以下语句查看:


0 and a.id1 = b.id1 and a.id2 = b.id2;

2016121172247492.png (825×281)

2.确定锁定表用户的sid与serial编号(可通过oracle用户确定也可通过系统用户确定)
a.通过oracle用户确定

2016121172326498.png (510×108)

b.通过系统用户确定

2016121172352758.png (544×108)

3.杀掉造成死锁的进程(已知是123阻塞了124号进程,杀掉即可解锁)

2016121172503640.png (346×75)

2016121172524500.png (781×119)

至此表死锁解除,现在存在的是数据表正常的锁定,等事务提交后自然消失.

oracle rac 死锁检测机制

rac环境下,死锁的检查是通过LMD进程来完成的,该进行默认情况下是60s 工作一次,也就是说死锁的检查至少需要1分钟甚至更长的时间,跟系统负载有关。
另外就是rac环境下,死锁的检测要在所有节点之间来回的通信,所以相对单机环境下,就要慢很多。其中隐含参数_lm_dd_interval 控制LMD工作的频率(一般情况下,不要调整该参数)

如何避免死锁?

对应oracle内部死锁,oracle自己会进行处理,但是由于应用方面导致的死锁或人为导致的死锁,那么需要进行人工干预。
Oracle死锁产生的四个必要条件如下:
1)资源不能被共享,只能由一个进程使用。
2)已经得到资源的进程可以再次申请新的资源。
3)已经分配的资源不能从相应的进程中被强制地剥夺。
4)系统中若干进程组成环状,环状中每个进程都在等待相邻进程正占用的资源。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读