java.sql.sqlexception:ORA-00060:在等待资源时检测到僵局



我有一个在多线程(通常为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列是主键列,此表_a上没有其他索引。我已经浏览了许多博客,他们建议避免使用位图索引。就我而言,没有比特图索引都不涉及任何外键。

注意:我们在有条件插入/更新之前使用了合并语句,但由于相同的原因,它也曾经失败。

请帮助我了解此问题的原因。

当多个DML命令尝试同时访问相同数据时,会出现僵局。

在这里和这里,您可以找到有关此问题的简短解释。这是错误的书面SQL命令的非常普遍的行为。我认为您应该重写它。

最新更新