我在作业Oracle中运行过程X时遇到了困难。在程序X中,它也在调用每个工作。
这是我的代码(RUNNING JOB):
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 ... */
PROCEDURE 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;
/
示例ss_print_1的每个程序
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);
如果在pl / sql编辑器(TOAD编辑器)中运行它运行良好,但如果使用作业(第一个代码)运行则会导致错误
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 :(得分:0)
警报日志将为您提供有关ORA-12011原因的更多信息。您可能需要DBA来帮助您完成这一点,具体取决于您的组织运行方式。
一些额外的观察。
因为10g DBMS_SCHEDULER取代了DBMS_JOB;保留DBMS_JOB是为了与现有应用程序向后兼容,但任何新的应该使用Scheduler,因为它具有更多更好的功能。
你的代码混合了DBMS_JOB和DBMS_SCHEDULER,这是一个坏主意。选择一个(即调度程序)并坚持下去。
此外,您的SUBMIT代码的下一个日期为&01; 01/01/4000 00:00:00' 。新年的第4000天距离很远,所以the job won't run for almost 2000 years,然后每150秒。我很佩服你对应用程序寿命的信心,但也许你应该先尝试让它在更紧迫的时间框架内运行。
虽然当你立刻打破工作时,也许你不关心它是否会运行。