oracle 锁的应用(DMS_LOCK)
2017-07-24 09:57
204 查看
目的:为了防止多个进程同时调用一个过程
前提:授予用户使用锁的权限:grant execute on dbms_lock to username(apps);
使用:
declare
l_lock_name varchar2(100);--锁的名字(一般是由包名+存储过程名+参数组成)
l_lockhandle varchar2(100);--锁标识
l_lock_output number;
begin
l_lock_name :=g_pkg_name||'.'||g_procedure_name||to_char(p_org_id);--锁的名字
/*
给锁分配唯一的标识
*/
dbms_lock.allocate_unique(lockname=>l_lock_name,
lockhandle=>l_lockhandle);
/*
请求一个锁:
l_lock_output 返回值:0--成功,1--超时,2--死锁,3--参数错误,4--已经分配锁重复申请,5---无效的lock_handle
*/
l_lock_output:=dbms_lock.request(l_lockhandle,
dbms_lock.x_mode,
5,--等待请求锁的时间
FALSE,---COMMIT OR ROLLBACK 是否释放锁,默认FALSE,共享模式下设置true
);
if l_lock_output<>0 then
fnd_file.put_line(fnd_file.log,'主程序正在运行,不能重复提交');
end if;
/*
业务代码
*/
/*
释放锁
*/
l_lock_output:=dbms_lock.release(l_lockhandle);
--exception 也要释放锁
exception when others then
l_lock_output:=dbms_lock.release(l_lockhandle);
end;
前提:授予用户使用锁的权限:grant execute on dbms_lock to username(apps);
使用:
declare
l_lock_name varchar2(100);--锁的名字(一般是由包名+存储过程名+参数组成)
l_lockhandle varchar2(100);--锁标识
l_lock_output number;
begin
l_lock_name :=g_pkg_name||'.'||g_procedure_name||to_char(p_org_id);--锁的名字
/*
给锁分配唯一的标识
*/
dbms_lock.allocate_unique(lockname=>l_lock_name,
lockhandle=>l_lockhandle);
/*
请求一个锁:
l_lock_output 返回值:0--成功,1--超时,2--死锁,3--参数错误,4--已经分配锁重复申请,5---无效的lock_handle
*/
l_lock_output:=dbms_lock.request(l_lockhandle,
dbms_lock.x_mode,
5,--等待请求锁的时间
FALSE,---COMMIT OR ROLLBACK 是否释放锁,默认FALSE,共享模式下设置true
);
if l_lock_output<>0 then
fnd_file.put_line(fnd_file.log,'主程序正在运行,不能重复提交');
end if;
/*
业务代码
*/
/*
释放锁
*/
l_lock_output:=dbms_lock.release(l_lockhandle);
--exception 也要释放锁
exception when others then
l_lock_output:=dbms_lock.release(l_lockhandle);
end;
相关文章推荐
- 在weblogic安装应用后报异常 'java.lang.NoClassDefFoundError: oracle/dms/http/Request' 处理方法
- oracle传输表空间在数据仓库ETL中的应用
- Oracle的简单应用
- oracle包(package)入门——应用实例
- DDL With the WAIT Option (DDL_LOCK_TIMEOUT) in Oracle Database 11g Release 1
- Oracle Lock and Hibernage Lock
- ORACLE应用经验-表空间
- Oracle Study--RAW Device在Oracle下的应用
- 怎样使用OCI编写多线程的ORACLE应用软件
- oracle表关联应用 【转载】
- Oracle中dblink的实际应用示例详解
- Oracle EBS 信用(Credit)额度(2)-基础应用
- 『ORACLE』 SQL语句简单应用(四)(11g)
- Oracle之 【RANDOM】使用dbms_random.string产生随机字符串的用法及应用
- java下OracleHelper包的应用实例
- Oracle学习应用之数据库性能优化策略
- Oracle的table lock
- oracle 启动时出现ORA-01157: cannot identify/lock data和ORA-01110: data file 错误
- [Oracle] 浅谈Lock与Latch
- 应用db link 把ORACLE 数据库中的表复制到另外一个数据库,也可以把表中的数据从一个库复制到另外一个库的表