当前位置: 首页 > 编程笔记 >

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

巴博耘
2023-03-14
本文向大家介绍Oracle数据表中的死锁情况解决方法,包括了Oracle数据表中的死锁情况解决方法的使用技巧和注意事项,需要的朋友参考一下

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

select object_name,session_id,os_user_name,oracle_username,process,locked_mode,status 
from v$locked_object l, all_objects a 
where l.object_id=a.object_id;

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

select username,v$lock.sid,trunc(id1/power(2,16)) rbs,bitand(id1,to_number('ffff','xxxx'))+0 slot,id2 seq,lmode,request from v$lock, v$session where v$lock.type = 'TX' and v$lock.sid = v$session.sid and v$session.username = 'CENTER' ;


 select
 (select username||':'||sid||':'||serial# from v$session where sid=a.sid) || 
 ' 阻塞了 ' || 
 (select username ||':'||sid||':'||serial# from v$session where sid=b.sid) 
 from v$lock a, v$lock b 
 where a.block = 1 
 and b.request > 0 
 and a.id1 = b.id1 
 and a.id2 = b.id2;

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

select sid,serial# from v$session where username='center';

b.通过系统用户确定

select sid,serial# from v$session where username='administrator';

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

alter system kill session ‘123,3935';

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

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

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

 类似资料:
  • 本文向大家介绍简单说明Oracle数据库中对死锁的查询及解决方法,包括了简单说明Oracle数据库中对死锁的查询及解决方法的使用技巧和注意事项,需要的朋友参考一下 死锁的原理 当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态, 此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。    死锁的定位

  • 问题内容: 我一直在尝试解决我在Golang并发中遇到的这个简单问题。我一直在搜索所有可能的解决方案,但没有发现与我的问题有关的特定信息(否则我可能会被遗漏)。这是我的代码: 它显示错误: 致命错误:所有goroutine都在睡觉-死锁! goroutine 1 [chan接收]:main.main()D:/Code/go/src/testconcurrency/main.go:23 + 0xca

  • 本文向大家介绍请谈一谈,什么情况下会发生死锁?解决死锁的策略有哪些?相关面试题,主要包含被问及请谈一谈,什么情况下会发生死锁?解决死锁的策略有哪些?时的应答技巧和注意事项,需要的朋友参考一下 考察点:死锁 (一)互斥条件:一个资源一次只能被一个进程访问。即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占 有。这种独占资源如CD-ROM驱动器,打印机等等,必须在占有该资源的进

  • 本文向大家介绍Java  解决死锁的方法实例详解,包括了Java  解决死锁的方法实例详解的使用技巧和注意事项,需要的朋友参考一下 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 java 死锁产生的四个必要条件: 1>互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用 2>不可抢占,资源请求者不能强制

  • 问题内容: 我正在学习Java的死锁,并且有来自Sun官方教程的以下示例代码: 阿方斯(Alphonse)和加斯顿(Gaston)是朋友,也是礼貌的忠实信徒。严格的礼貌规则是当您向朋友鞠躬时,您必须保持鞠躬,直到您的朋友有机会归还弓箭为止。不幸的是,该规则不能解决两个朋友可能同时鞠躬的可能性。 这是Sun的解释: 死锁运行时,两个线程极有可能在尝试调用bowBack时阻塞。两个块都不会结束,因为每

  • 本文向大家介绍Oracle删除死锁进程的方法,包括了Oracle删除死锁进程的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Oracle删除死锁进程的方法。分享给大家供大家参考。具体如下: 步骤1:用以下SQL查看进程列表,判断出被锁定的表 查找被锁表 步骤2 删除进程,如之前的“删除号”查找出的结果为“286, 2184”,则运行以下SQL 删除后不会马上生效一般,要过一会。 希望