让我们说我有一个procedure
叫myproc
.这是一个复杂的过程,我不能允许两个实例同时执行proc.
其实我这样做使用dbms_application_info.set_module
:
procedure start_process is
begin
dbms_application_info.set_module('myproc', 'running');
end;
Run Code Online (Sandbox Code Playgroud)
并在运行过程之前验证:
select 'S'
from v$session v
where v.module = 'myproc'
and v.action = 'running';
Run Code Online (Sandbox Code Playgroud)
在数据库级别,有更好的方法来检查这个吗?
Ren*_*ger 10
使用dbms_lock.allocate_unique和dbms_lock.request.该使用说明称:
使用新锁名称调用ALLOCATE_UNIQUE的第一个会话将生成唯一的锁ID,并将其存储在dbms_lock_allocated表中.后续调用(通常由其他会话)返回先前生成的锁ID.
我想这可能就是你所追求的.