我们有一个由Oracle 进程P1 访问的表TAB1(例如SID=123)。该过程需要动态 SQL 删除,然后是提交。
由 SID=123 发起的进程 P1 除了这个 TAB1 相关操作之外还包含许多操作。
设想:
SID=123 有效;P1 对 TAB1 施加了行独占锁(从查询locked_object 视图中获得)。
另一个 oracle 进程 P2 由 SID=124 启动(与 P1 完全相同的进程,但针对不同的数据输入集)在某个时间(例如,2-3 分钟)P1 启动之后。
SID=124 等待由 SID=123 发起的进程 P1 完成;P2 对 TAB1 施加了行独占锁(从查询locked_object 视图中获得)。
问题:
我认为 P2 的同一行级锁期望 P1 的行级锁“可以继续”。我们是否能够手动覆盖进程 P1 对 TAB1 施加的锁定(我希望这是可能的),并在其对 TAB1 的操作结束后释放锁定?这是否有助于减少 P2 现在在 TAB1 上等待整个 P1 结束的漫长等待?
任何建议将不胜感激。如果您需要更多信息,请告诉我。