Задание сдавалось дважды при отправке в оракул - PullRequest
0 голосов
/ 21 декабря 2018

Мы столкнулись с проблемой при отправке работы от одного из моих клиентов.Эти работы являются частью процесса «Конец дня».

Когда я отправляю задание СУБД из Java, после проверки состояния задания в «user_jobs» я получаю одновременно два задания с одинаковым именем, которые создают сеансы блокировки и взаимоблокировки.

Но проблема возникает не все дни.Это произошло только 3 раза с прошлого месяца.

Не могли бы вы дать нам некоторые сведения о том, как идентифицировать эту проблему?

Версия Oracle 11g, и это версия Enterprise.

Следующая процедура используется для отправки задания из java.

CREATE OR REPLACE FUNCTION submitProcAsJob(p_szJobName VARCHAR2,
p_szInstanceNo VARCHAR2 DEFAULT NULL) RETURN NUMBER IS
m_iJobNo NUMBER;
m_iInstanceNo NUMBER;
BEGIN
BEGIN
m_iInstanceNo := To_Number(TRIM(p_szInstanceNo));
EXCEPTION WHEN OTHERS THEN
m_iInstanceNo := NULL;
END;

IF m_iInstanceNo IS NOT NULL THEN
DBMS_JOB.SUBMIT(m_iJobNo, p_szJobName, SYSDATE, NULL, FALSE, m_iInstanceNo) ;
ELSE
DBMS_JOB.SUBMIT(m_iJobNo, p_szJobName, SYSDATE, NULL);
END IF;

IF m_iJobNo IS NULL THEN
RAISE_APPLICATION_ERROR(-20002, 'Unable to submit job.');
END IF;

COMMIT ;
RETURN m_iJobNo;
EXCEPTION WHEN OTHERS THEN
RETURN 0;
END;

Входные данные, переданные в процедуру: -

p_szJobName :- EOD_UPLOADFINDETAILS_CARD('001','507213',To_Date('20181203', 'yyyyMMdd'),'SYSTEM','001','CARD','N','Y');

p_szInstanceNo :- 1

Ниже приведены выходные данные, общие для клиента,

SQL> SELECT job, log_user, schema_user, last_date, this_date, what, broken FROM DBa_jobs where broken='N';

JOB LOG_USER SCHEMA_USER 
---------- ------------------------------ ------------------------------ 
LAST_DATE THIS_DATE 
--------- --------- 
WHAT 
--------------------------------------------------------------------------------
B 
- 
285712 SYS SYSMAN 
05-DEC-18 
EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS(); 
N 


JOB LOG_USER SCHEMA_USER 
---------- ------------------------------ ------------------------------ 
LAST_DATE THIS_DATE 
--------- --------- 
WHAT 
--------------------------------------------------------------------------------
B 
- 
829059 ICSDB ICSDB 
04-DEC-18 
EOD_UPLOADFINDETAILS_CARD('001','507213',To_Date('20181203', 'yyyyMMdd'),'SYSTEM
','001','CARD','N','Y'); 
N 

JOB LOG_USER SCHEMA_USER 
---------- ------------------------------ ------------------------------ 
LAST_DATE THIS_DATE 
--------- --------- 
WHAT 
--------------------------------------------------------------------------------
B 
- 

829060 ICSDB ICSDB 
04-DEC-18 
EOD_UPLOADFINDETAILS_CARD('001','507213',To_Date('20181203', 'yyyyMMdd'),'SYSTEM
','001','CARD','N','Y'); 

JOB LOG_USER SCHEMA_USER 
---------- ------------------------------ ------------------------------ 
LAST_DATE THIS_DATE 
--------- --------- 
WHAT 
--------------------------------------------------------------------------------
B 
- 
N 


SQL> SELECT * FROM DBA_JOBS_RUNNING;

SID JOB FAILURES LAST_DATE LAST_SEC THIS_DATE THIS_SEC 
---------- ---------- ---------- --------- -------- --------- -------- 
INSTANCE 
---------- 
2661 829060 04-DEC-18 21:46:47 
1 

2838 829059 04-DEC-18 21:46:47 
1 
...