我们有一个由Oracle进程P1访问的表TAB1(例如SID = 123)。该进程需要动态SQL删除,然后提交。表上的锁定机制
由SID = 123启动的进程P1由除TAB1相关操作以外的很多操作组成。
场景:
SID = 123是活动的; P1对TAB1施加了一个行独占锁(从查询locked_object视图获得)。
另一个oracle进程P2在SID = 124(与P1完全相同,但是对于不同的数据输入集合)之后,在P1启动后的某个时间(比如说2-3分钟)开始启动。
SID = 124正在等待,直到由SID = 123启动的进程P1完成; P2对TAB1施加了行独占锁(从查询locked_object视图获取)。
问:
我认为P2相同的行级锁预期由P1行级锁“能够反超”。 我们能否手动取代TAB1上的进程P1所施加的锁定(我希望可以),并在TAB1上的操作结束后释放锁定?这是否有助于减少P2在TAB1上现有的长时间等到整个P1结束?
任何建议将不胜感激。请让我知道你是否需要更多的信息。
您的描述非常低级,并侧重于当前的实施及其问题。它没有提供任何关于你真正想要达到的信息。如果您在更高级别和更多上下文信息中描述您的任务,则更有可能获得有用的答案和良好的解决方案。 – Codo
@Codo:我希望以下描述是好的?一个表由于同时的oracle进程而被锁定,我们希望一个进程应该等待,直到下一个进程对该表的操作处于活动状态;不要等到第一个过程完成。 – Lakshman
@codo的建议是,如果你发布了你正在尝试实现的目标,可能会想出一个完全不同的解决方案,这是你没有考虑过的。 – Ben