客户报告在做 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