我们有一个表TAB1,由Oracle P1 (例如SID=123)访问。该进程需要动态的SQL,然后是commit。
进程P1由SID=123发起,除了与TAB1相关的操作外,还包含许多操作。
设想情况:
问题:
我认为P2的行级锁期望P1的行级锁“可以继续”。我们能否手动重写process P1在TAB1上施加的锁定(我希望这是可能的),并在其对TAB1的操作结束后释放锁吗?这是否有助于减少P2现在在TAB1上等待的时间,直到整个P1结束?
任何建议都将不胜感激。如果你需要更多的信息,请告诉我。
发布于 2012-12-12 20:15:56
锁是在事务边界上释放的,而不是在进程边界上释放的。
简而言之,如果希望P1立即释放锁,P1必须在delete操作之后以显式提交或回滚的方式结束当前的超越。
当然,结束事务还会提交/回滚在上一次提交/回滚之后在同一会话中执行的其他操作。如果这是一个问题,您必须重新考虑业务逻辑。
等等,你写了“动态SQL删除和提交”.如果您的意思是“立即跟踪”,则行排他锁已经立即释放。
发布于 2012-12-14 10:37:36
实际上,我已经“避免了这种情况”,这意味着“这个答案不是问题的解决方案”。
我为避免这种情况所做的事情:
感谢“Codo,@a_horse_with_no_name”,“Ben”,“Justin Cave”和“colemar”,感谢您在美化问题上下文方面的所有帮助--明智和您的支持。
@贾斯汀·凯夫:我一直在想你提出的同样的解决方案,但如果我昨天看到这个,我就不用浪费时间了。不管怎样,非常感谢你的支持。
https://stackoverflow.com/questions/13845228
复制相似问题