记录一次线上 Oracle 数据库 ORA-00060: deadlock detected 故障案例

这篇博客记录了一次线上Oracle数据库遇到ORA-00060死锁问题的诊断过程。在分析日志和死锁图后,发现是由于五个线程同时执行相同导入任务,导致Transaction Deadlock。最终,问题根源追溯到上游服务器误生成了内容相同的五个导入文件,而非下游接口幂等性设计问题。
摘要由CSDN通过智能技术生成

客户报告在做 job 导入的时候偶尔会碰到 ORA-00060 错误,客户端日志如下:

2020-11-23 12:22:15 (GMT+0100) [ERROR] : java.sql.SQLException: ORA-00060: deadlock detected while waiting for resource

因为碰不到客户的生产环境,所以要了一下他们的服务端日志。一般来讲,ORA-00060 总是结对出现,然后我们根据这个错误抛出的程序调用栈,可以分别找到对应的两个线程,根据上下文及各自的 sql 语句不难得出数据库死锁的原因所在。
但本文案例有些特殊,属于二般情况。拿到服务端日志以后直奔 ORA-00060 的抛错调用栈而去,却发现只有一种线程栈,对应的 sql 语句也只有一种:

update jobother set jobother.allocatestatus='C'  where job_unid in (142000000000397637,140000000000397301,140000000000397302,140000000000397303,140000000000397304,1400000000003
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值