2017-12-20 29 views
0

여러 작업을 병렬로 실행하려고 할 때 아래 예외가 발생합니다. 간헐적으로 발생합니다.SQL 예외 ORA-27478 : DBMS_SCHEDULER.run_job 중에 작업 "JOB_MIG_17602"이 실행 중임

작업 테이블을 업데이트하는 저장 프로 시저를 호출

실패의 포인트는 작업의 DBMS_SCHEDULER.run_job

SQL Exception ORA-27478: job "JOB_MIG_17602" is running 
"ORA-06512: at "SYS.DBMS_ISCHED", line 196 
ORA-06512: at "SYS.DBMS_SCHEDULER", line 48 

설명이다. 고유 한 작업 이름을 사용하여 작성된 작업의 다른 인스턴스가 동일한 저장 프로시 듀어를 호출합니다. 작업을 활성화하면이 실행을위한 자격을 의미

DBMS_SCHEDULER.create_job(
    job_name      => l_job_name, 
    job_type      => 'STORED_PROCEDURE', 
    job_action     => i_chunk_processor_name, 
    number_of_arguments   => 2, 
    enabled      => FALSE, 
    auto_drop     => FALSE 
); 

DBMS_SCHEDULER.set_job_argument_value(job_name => l_job_name, argument_position => 1, argument_value => i_user_id); 

DBMS_SCHEDULER.set_job_argument_value(job_name => l_job_name, argument_position => 2, argument_value => i_chunk_id); 


DBMS_SCHEDULER.enable(l_job_name); 

COMMIT; 

DBMS_SCHEDULER.run_job(job_name => l_job_name, use_current_session => FALSE); 
+0

db 버전은 무엇입니까? 11.2 이하? –

+0

DB 버전은 11.2.0.4.0 –

+0

입니다. 귀하의 사례와 관련이 없습니다. 이 문제가 있지만 11.2 이전 버전의 db 관련 버그 (M.O.S.-Doc ID 784664.1)가 있습니다. 11.2에서 해결되었습니다. –

답변

0

:

은 아래 작업을 실행하는 단계입니다. 그래서 스케줄러 코디네이터가 그것을 집어 들고 그것을 당신이 "run_job"명령에 도착 전에 을 시작하면, 당신이 오류가 발생합니다, 예를 들어

SQL> begin 
    2 DBMS_SCHEDULER.create_job(
    3  job_name      => 'XXX', 
    4  job_type      => 'PLSQL_BLOCK', 
    5  job_action     => 'begin dbms_lock.sleep(60); end;', 
    6  enabled      => FALSE, 
    7  auto_drop     => FALSE 
    8 ); 
    9 end; 
10/

PL/SQL procedure successfully completed. 

SQL> exec DBMS_SCHEDULER.enable('XXX'); 

PL/SQL procedure successfully completed. 

-- I wait for a few seconds 
-- 
SQL> exec DBMS_SCHEDULER.run_job(job_name => 'XXX', use_current_session => FALSE); 
BEGIN DBMS_SCHEDULER.run_job(job_name => 'XXX', use_current_session => FALSE); END; 

* 
ERROR at line 1: 
ORA-27478: job "MCDONAC"."XXX" is running 
ORA-06512: at "SYS.DBMS_ISCHED", line 238 
ORA-06512: at "SYS.DBMS_SCHEDULER", line 568 
ORA-06512: at line 1 

당신이 그것을 가능하게하는 경우, 당신은을 필요가 없습니다 명시 적 run_job 요청.