有没有最好的方法可以避免在Oracle中多次执行进程?

Sér*_*els 14 oracle plsql

让我们说我有一个proceduremyproc.这是一个复杂的过程,我不能允许两个实例同时执行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_uniquedbms_lock.request.该使用说明称:

使用新锁名称调用ALLOCATE_UNIQUE的第一个会话将生成唯一的锁ID,并将其存储在dbms_lock_allocated表中.后续调用(通常由其他会话)返回先前生成的锁ID.

我想这可能就是你所追求的.