2013-11-05 5 views
1

DBMS_Scheduler를 사용하여 백엔드 (전자 메일 전송 용)로 예약 된 작업이 있습니다. 그러나 사용자가 전자 메일을 예약하고 단추를 클릭 할 때 바로 전자 메일을 보낼 수 있도록 허용해야했습니다.Oracle에서 동일한 작업을 여러 번 (병렬로) 실행하는 방법?

이렇게하려면 다음과 같은 조치를 취하십시오. 사용자가 단추를 클릭하면 절차가 호출됩니다. 프로시 저는 위에서 언급 한 (run_job을 사용하여) 작업을 실행합니다. 이를 통해 동일한 작업을 사용하여 전자 메일을 즉시 보내고 예정된 시간에 나중에 보낼 수있었습니다.

내가 지금 직면 한 문제는 사용자 A가 버튼을 클릭한다고 가정 해 보겠습니다. 동시에 사용자 B는 시스템의 버튼을 클릭합니다. 그런 다음 사용자 B에게 다음과 같은 오류 메시지가 표시됩니다. 작업이 이미 실행 중입니다.

어떻게 오라클 (병렬에서 )을 동일한 작업 여러 번 실행합니까?

답변

2

DBMS_SCHEDULER.RUN 매개 변수 USE_CURRENT_SESSIONTRUE으로 설정하십시오. 당신이 이벤트를 기반으로 작업에 작업을 변환 할 수 있습니다 경우

--Create a test job. 
begin 
    dbms_scheduler.create_job(
     job_name => 'TEST_JOB', 
     job_type => 'PLSQL_BLOCK', 
     job_action => 'BEGIN dbms_lock.sleep(3); END;'); 
end; 
/

--This fails if run concurrently. 
begin 
    dbms_scheduler.run_job(job_name => 'TEST_JOB', use_current_session => FALSE); 
end; 
/

--This can run concurrently. 
begin 
    dbms_scheduler.run_job(job_name => 'TEST_JOB', use_current_session => TRUE); 
end; 
/
+0

정말 고마워요! 나는 이것을 밖으로 시험 할 것이다! 하지만 "use_current_session"이 어떻게 작동하는지 알려주시겠습니까? –

+0

@SinghSiddharth 설명서는 다음과 같이 시작하기에 좋습니다. http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_sched.htm#ARPLS72395 –

1

, 당신이 그들을 트리거 이벤트에 응답 가벼운 작업을 사용할 수 있습니다. 이벤트 기반 작업의 경우 parallel_instances를 true로 설정하여 동일한 작업의 여러 인스턴스를 병렬로 실행할 수 있습니다.

원하는대로 할 수있는 방법입니다.

간단한 병렬 작업은 간단한 작업으로 짧은 생활 작업을하기위한 것입니다.

관련 문제