我有一个在多线程(通常是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语句,但由于同样的原因,它也常常失败。
请帮助我理解这个问题的原因。