2014-12-29 2 views
0

작업 Oracle에서 프로 시저 X를 실행하는 데 어려움이 있습니다. 프로 시저 X에서는 각 작업을 호출합니다. 여기프로 시저 실행 다른 작업을 호출하는 작업이있는 PL/SQL Oracle

은 내 코드 (실행중인 작업)입니다 :

DECLARE 
    X NUMBER; 
BEGIN 
    SYS.DBMS_JOB.SUBMIT 
    (job  => X 
    ,what  => 'begin 
ss_run_all_jobs3; 
end;' 
    ,next_date => to_date('01/01/4000 00:00:00','dd/mm/yyyy hh24:mi:ss') 
    ,interval => 'SYSDATE+2.5/1440 ' 
    ,no_parse => FALSE 
); 
    SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); 
    SYS.DBMS_JOB.BROKEN 
    (job => X, 
    broken => TRUE); 
COMMIT; 
END; 
/

절차의 SS_RUN_ALL_JOBS3;

/*other script ... */ 
BEGIN ss_print_all; END; 
/*other script ... */ 

절차 ss_print_all

CREATE OR REPLACE PROCEDURE SEAT.ss_print_all 
IS 
l_jobno pls_integer; 
BEGIN 
    dbms_job.submit(l_jobno, 'begin ss_print_1; end;' ,sysdate); 
    dbms_job.submit(l_jobno, 'begin ss_print_2; end;' ,sysdate); 
    dbms_job.submit(l_jobno, 'begin ss_print_3; end;' ,sysdate); 
    dbms_job.run(l_jobno); 
END; 

/

vname := 'RUNPRINT_SEATFRONT';--||vcounter; 
--DBMS_SCHEDULER.drop_job(vname); 
dbms_scheduler.drop_job (vname); 
dbms_scheduler.create_job( 
job_name => vname, 
job_type => 'EXECUTABLE', 
job_action => 'C:\Windows\System32\cmd.exe', 
job_class => 'DEFAULT_JOB_CLASS', 
--comments => 'test job', 
auto_drop => false, 
number_of_arguments => 3, 
enabled => FALSE); 
dbms_scheduler.set_job_argument_value(job_name => vname, argument_position => 1, argument_value => '/q'); 
dbms_scheduler.set_job_argument_value(job_name => vname, argument_position => 2, argument_value => '/c'); 
dbms_scheduler.set_job_argument_value(job_name => vname, argument_position => 3, argument_value => '"'||xxx.txt||'"'); 
dbms_scheduler.enable(vname); 

ss_print_1 예를 들어 각 절차 PL/SQL 편집기 (두꺼비 편집기)에서이 실행되는 경우 잘 실행 , 작업 (첫 번째 코드)을 사용하여 실행 중이면 오류가 발생합니다

13:12:05 Info: Job #442 could not be executed. ORA-12011: execution of 1 jobs failed 
ORA-06512: at "SYS.DBMS_IJOB", line 651 
ORA-06512: at "SYS.DBMS_JOB", line 284 
ORA-06512: at line 1 

첫 번째 작업이 아직 처리 중이기 때문입니까?

감사합니다 ..

답변

0

경고 로그는 ORA-12011의 원인에 대한 자세한 정보를 제공합니다. 조직에서 실행하는 방식에 따라 DBA가 필요합니다.

추가 관찰.

10g DBMS_SCHEDULER가 DBMS_JOB을 대체하므로, DBMS_JOB은 기존 응용 프로그램과의 하위 호환성을 유지하기 위해 유지되지만 더 많은 기능이 추가 되었기 때문에 Scheduler를 사용해야합니다.

코드 믹스에 DBMS_JOB와 DBMS_SCHEDULER가 포함되는 것이 좋지 않습니다. 하나 (예 : 스케줄러)를 선택하고 막대기를 사용하십시오.

또한 SUBMIT 코드의 다음 날짜는 '01/01/4000 00:00:00 '입니다. 새해 첫날 4000 광고가 먼 길이므로, the job won't run for almost 2000 years, 150 초마다. 나는 당신의 신앙을 당신의 신청서의 장수에 감탄하지만 어쩌면 당신은 그것을보다 즉각적인 시간 틀에서 실행하도록 노력해야 할 것입니다.

작업을 즉시 중단해도 실행 여부는 상관 없습니다.