You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

存储过程中DBMS_LOCK.ALLOCATE_UNIQUE与RELEASE间COMMIT后锁释放时机咨询

DBMS_LOCK在COMMIT后是否会自动释放?

这个问题问到点子上了!在Oracle里,DBMS_LOCK包管理的锁有个核心特性:它和事务是完全独立的,COMMIT或者ROLLBACK操作根本不会影响这类锁的持有状态。

具体到你的场景,咱们一步步拆解:

  • 当你执行步骤2的DBMS_LOCK.ALLOCATE_UNIQUE时,分配到的是会话级锁——这个锁绑定的是当前数据库会话,而不是某个具体的事务。
  • 步骤3的COMMIT只会提交当前事务中的数据修改,对已经分配的会话级锁没有任何释放作用,锁会继续被当前会话持有。
  • 直到步骤5执行DBMS_LOCK.RELEASE,这个显式的释放操作才会把之前分配的锁彻底释放掉。

额外补充个小细节:如果是用DBMS_LOCK.REQUEST申请锁时,指定了RELEASE_ON_COMMIT参数(值为TRUE),那这类锁会在COMMIT时自动释放,但ALLOCATE_UNIQUE分配的锁默认是会话级,不存在这个参数,所以完全不受COMMIT影响。

所以结论非常清晰:锁是在步骤5之后释放的,步骤3的COMMIT不会触发锁释放。

内容的提问来源于stack exchange,提问作者fortm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:55:10