设为首页 加入收藏

TOP

解决同一程序在并行同时调用时,出现资源等待错误-使用DBMS_LOCK.sleep
2019-09-17 18:28:39 】 浏览:18
Tags:解决 同一 程序 并行 时调 用时 出现 资源 等待 错误 使用 DBMS_LOCK.sleep

 

解决同一程序被并行同时调用时,出现资源等待错误问题。 使用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;

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇CMU-15445 LAB3:事务隔离,two-ph.. 下一篇01-Hadoop概述及基础环境搭建

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目