暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle ORA-00060: 在多线程Java批处理进程中等待资源时检测到死锁

askTom 2017-09-25
1720

问题描述

嗨,汤姆

我有一个在生产上运行的多线程批处理过程,由于 “ORA-00060: 在等待资源时检测到死锁” 而失败。我收到以下错误消息:

02:25:25,899 [CobolThread 34] ERROR Error executing update for rawSQL:
update TABLE_A s set s.INT_COL = s.INT_COL + 1 where s.PRIM_ID = ?
with 'string' parameter named 'primId' to : '8741104958' to indices: 1
java.sql.SQLException: ORA-00060: deadlock detected while waiting for resource


在更新TABLE_A中的数据时使用的 “PRIM_ID” 对于每个记录 (主键) 都是唯一的,因此每个线程的工作分布是唯一的 (没有2个或更多线程同时更新同一行的机会)。
表TABLE_A上没有位图-索引唯一的索引是主键唯一索引。
另外,没有外键。

对于合并查询的批处理过程,我们一直面临着相同的问题,后来我们将其更改为条件更新/插入以避免出现竞争条件。但是,问题尚未解决。

你能帮我解决这个问题吗?

谢谢
SD


专家解答

“没有2个或更多线程同时更新同一行的机会”

你到底是怎么保证的?

因为你有一个死锁的事实表明有多个会话更新相同的行!

即使您的批处理过程正常工作,也可能有其他应用程序试图同时更改相同的行或其他阻塞操作。

无论如何,当您遇到死锁时,数据库会将详细信息写入服务器上的跟踪文件。把这个挖出来。

这将告诉您涉及哪些会话以及原因。

如果您需要了解这一点的帮助,请查看:

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1528515465282

或者将内容放在这个问题的评论中,我们将看看是否可以提供帮助。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论