首页 > 解决方案 > Oracle 表在过程执行期间被锁定以进行插入,但允许更新

问题描述

我们有一个对多个表中的多条记录进行操作的过程,在某些情况下,该过程需要在名为 的表中插入TAX,当此插入发生时,另一个名为的表PAYMENT被锁定以进行插入,但不能进行更新。

因此,如果另一个事务尝试插入PAYMENT它,则等待该过程完成,但尝试更新的事务PAYMENT不会等待。

TAX表有两个外键PAYMENT,一个是可空的,另一个是强制性的,并且TAX表上有两个索引,一个在FK_PAY(强制性的)和一个在(FK_PAY_SETTLEMENT, ID)(具有强制性ID列的可选)上。

我能做些什么来防止这个PAYMENT表锁定,因为这个表是高并发插入的目标。


我要提一下,PAYMENT表是在 的散列上分区的id,并TAX通过引用在FK_PAY(强制引用)上进行分区。

标签: indexingoracle11glockingdatabase-partitioning

解决方案


外键引用(在 Tax 表中)阻止了 Payment 表上的 Insert 操作。

更新操作(在支付表中)的工作原理是更新表中的旧数据(没有主键或任何其他键冲突)。


推荐阅读