java.sql.SQLException:ORA-00060:在等待资源时检测到死锁

时间:2017-09-26 07:12:58

标签: multithreading jdbc sqlexception database-deadlocks

我有一个在多线程(通常是16/32)上运行的Java批处理。有一个JDBC查询有条件地在表中插入/更新。

但是,由于以下错误,某些记录失败:

[CobolThread 34] ERROR (com.splwg.base.support.sql.PreparedStatementImpl) 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

在此查询中,PRIM_ID列是主键列,此TABLE_A上没有其他索引。我已经浏览了很多可用的博客,他们建议的是避免使用Bitmap索引。在我的例子中,没有位图索引,也没有涉及任何外键。

注意:我们在条件插入/更新之前使用了MERGE语句,但由于同样的原因,它也常常失败。

请帮助我理解这个问题的原因。

1 个答案:

答案 0 :(得分:0)

当多个DML命令试图同时访问相同数据时,会出现死锁。

Herehere您可以找到有关此问题的简短说明。这是错误的写入SQL命令的一种非常常见的行为。我想你应该改写它。