【问题标题】:Running procedure PL/SQL Oracle with Job that call another Job使用调用另一个作业的作业运行过程 PL/SQL Oracle
【发布时间】:2014-12-29 06:14:08
【问题描述】:

我在作业 Oracle 中运行过程 X 时遇到困难。在过程 X 中,它也在调用每个作业。

这是我的代码(运行作业):

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

是因为第一份工作仍在处理中吗?

谢谢你..

【问题讨论】:

    标签: oracle stored-procedures plsql scheduler jobs


    【解决方案1】:

    警报日志将为您提供有关 ORA-12011 原因的更多信息。您可能需要一位 DBA 来帮助您解决这方面的问题,具体取决于您的组织如何运作。

    一些额外的观察。

    由于 10g DBMS_SCHEDULER 取代了 DBMS_JOB;保留 DBMS_JOB 是为了与现有应用程序向后兼容,但任何新的东西都应该使用调度程序,因为它具有更多更好的功能。

    您的代码混合了 DBMS_JOB 和 DBMS_SCHEDULER,这是个坏主意。选择一个(即调度程序)并坚持下去。

    此外,您的 SUBMIT 代码的下一个日期为 '01/01/4000 00:00:00' 。距离公元 4000 年元旦还有很长的路要走,所以the job won't run for almost 2000 years,然后每 150 秒。我很钦佩您对应用程序寿命的信心,但也许您应该首先尝试让它在更直接的时间范围内运行。

    虽然当你立即中断工作时,也许你并不关心它是否运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 2017-01-01
      • 2023-03-12
      • 2019-02-02
      • 2010-12-18
      • 1970-01-01
      • 2020-04-30
      相关资源
      最近更新 更多