专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

oracle行锁独占长时间不释放 oracle锁超时 怎么解锁

ins518 2024-11-14 16:41:21 技术文章 8 ℃ 0 评论

1 现象

项目反馈某模块所有菜单不能使用,原因是在更新某表时产生了死锁。

2 解决思路

生产环境问题,情况紧急,赶紧排查。

首先,先看模块所在应用的日志,是否与分布式事务协调器LCN相关,发现该模块的接口未使用分布式事务。

其次,从程序进行排查,选定一个可以必现的接口进行调用,分析接口中是否有多处进行表更新,导致死锁。这里更正下,并不是死锁,而是行锁长时间不释放,并未抛出deadlock异常。经排查,该接口只有一处update语句,且在无其他任何菜单、定时器等运行的情况下,也会锁超时。

第三,从日志中copy出完整的update语句,在navicat中执行,发现也会锁超时。到这里基本可以排除是程序的原因,可以从oracle本身分析。

第四,同事反映其他模块是正常的,在客户端执行其他update语句,正常!查看这个两个模块的表空间是否相同,目的为了查找是否表空间满了导致不能更新。经过分析,发现表空间相同,且其他设置均相同。

第五,查看oracle日志,发现有ORA-28日志,属于kill线程;无其他信息。百思不得其解。

第六,去和项目经理反馈,未找到原因,给其演示在navicat等客户端也会锁超时,演示成功。完成后,灵感并发,这个更新锁超时的表,其他的字段是否可以更新?发现可以更新成功,再尝试原update语句,发现也可以成功。

第七,在页面操作这个模块菜单,发现都正常了,问题解决。但未找到原因,接下来深入分析。

也欢迎资深的您留言,指点一二,不胜感激。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表