经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Oracle » 查看文章
解决同一程序在并行同时调用时,出现资源等待错误-使用DBMS_LOCK.sleep
来源:cnblogs  作者:flyingsanddream  时间:2019/5/5 8:54:15  对本文有异议

 

解决同一程序被并行同时调用时,出现资源等待错误问题。 使用DBMS_LOCK.sleep (10);

PROCEDURE prc_lock_test(v_engine_id in varchar,
v_flag_desc in varchar,
v_sysdate in varchar,
exitcode OUT NUMBER) AS
l_proc_name VARCHAR2(100) := 'prc_lock_test';
v_p_name NUMBER(2);
v_status varchar2(20);
v_cou NUMBER(2);
logger logger_factory := logger_factory;
BEGIN
exitcode := -20099;
logger.info(l_proc_name || ',Start');

SELECT COUNT (1)
INTO v_cou
FROM Z_CON_STATUS
WHERE PROC_NAME = 'prc_lock_test';

IF v_cou = 0 then
INSERT INTO Z_CON_STATUS
(proc_name, status, sys_creation_date)
VALUES
('prc_lock_test', 'Start', SYSDATE);
COMMIT;

logger.info(l_proc_name || ',sysdate1:'||to_char(sysdate,'yyyyhh24miss'));
ELSE
LOOP
select status
into v_status
from Z_CON_STATUS
where proc_name = 'prc_lock_test';

EXIT WHEN v_status = 'End';

IF v_status = 'Start' THEN
DBMS_LOCK.sleep (10);
logger.info(l_proc_name || ',lock sysdate2:'||to_char(sysdate,'yyyyhh24miss'));
END IF;

END LOOP;

END IF;

UPDATE Z_CON_STATUS
SET STATUS = 'Start', SYS_CREATION_DATE = SYSDATE
WHERE PROC_NAME = 'prc_lock_test';
COMMIT;

/*Keep BAK table for One month */
v_p_name := TO_NUMBER(TO_CHAR(SYSDATE + 1, 'DD'));

EXECUTE IMMEDIATE 'ALTER TABLE BAK_Z_PRODUCTIONORDERS TRUNCATE PARTITION P_' ||
v_p_name || ' UPDATE INDEXES';

EXECUTE IMMEDIATE 'ALTER TABLE BAK_Z_PRODUCTIONORDERS_BOM TRUNCATE PARTITION P_' ||
v_p_name || ' UPDATE INDEXES';

UPDATE Z_CON_STATUS
SET STATUS = 'End', SYS_CREATION_DATE = SYSDATE
WHERE PROC_NAME = 'prc_lock_test';
COMMIT;
logger.info(l_proc_name || ' Completed.');
exitcode := 0;
EXCEPTION
WHEN OTHERS THEN
exitcode := SQLCODE;
logger.error;
RAISE;
END prc_lock_test;

原文链接:http://www.cnblogs.com/flyingsanddream/p/10796374.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号