DBMS_LOCK.ALLOCATE_UNIQUE lock release



在调用DBMS_LOCK之间。ALLOCATE_UNIQUE和DBMS_LOCK。RELEASE 在存储过程中,如果存储过程中有一个中间 COMMIT 是否在存在 COMMIT 的语句处释放 Lock?

1. SELECT QUERY
2. DBMS_LOCK.ALLOCATE_UNIQUE
...
3. COMMIT
4. BEGIN CURSOR
...
5. DBMS_LOCK.RELEASE

那么锁是在语句 3 之后还是在语句 5 之后释放?

您的问题基于错误的猜测,即ALLOCATE_UNIQUE建立了锁。事实上,除了保存名称-值对、锁名 => 锁句柄(并且它应用内部提交,所以不要在事务中间使用它(之外,此过程什么都不做。

要建立锁定,您应该使用DBMS_LOCK.REQUEST功能。它具有名为 release_on_commit 的参数,因此这两种情况都是可行的:锁定可以在语句 3 或语句 5 释放,具体取决于请求模式。

最新更新