1

我正在使用 Oracle 10g XE,并且正在尝试为存储过程创建计划作业。我授予以下权利hr

grant create job to hr ;
grant create external job to hr ;

然后登录hr并创建了一个工作

begin
  dbms_scheduler.create_job(
      job_name => 'THIS_IS_DA_NAME',
      job_type => 'STORED_PROCEDURE',
      job_action => 'PROC_MYSTOREDPROC',
      start_date => sysdate + (5/(24*60)),
      repeat_interval => 'FREQ=MINUTELY; interval=1',
      enabled => TRUE,
      comments => 'Runtime: Every day every minute');
end;

这成功了。但该工作没有显示dba_scheduler_job_run_detailsdba_scheduler_job_log

select log_date, job_name, status, req_start_date, actual_start_date, run_duration
from   dba_scheduler_job_run_details

select log_date, job_name, status
from dba_scheduler_job_log

它列在此视图/表中

select *
from dba_scheduler_jobs

这里有什么问题,为什么存储过程不会运行?它运行良好

exec PROC_MYSTOREDPROC

此外,立即运行作业效果很好

EXEC dbms_scheduler.run_job('hr.THIS_IS_DA_NAME');
4

2 回答 2

1

DBMS_SCHEDULER文档中:

JOB_QUEUE_PROCESSES初始化参数指定可以为执行作业创建的最大进程数。从 Oracle Database 11g 第 2 版 (11.2) 开始,JOB_QUEUE_PROCESSES适用于DBMS_SCHEDULER作业。将此参数设置为 0 将禁用DBMS_SCHEDULER作业。

因此,请确保将JOB_QUEUE_PROCESSES初始化参数设置为大于 1 的值。

您还需要提交以触发对您的工作请求的验证。

提交后,作业将在USER_SCHEDULER_JOBS视图中安排:

SQL> select job_name, start_date from user_scheduler_jobs;

JOB_NAME        START_DATE
--------------- -----------------------------------
THIS_IS_DA_NAME 19-DEC-12 08.15.47.000000 AM -06:00

当然,由于您要求将其安排在 5 分钟后,因此还没有任何行USER_SCHEDULER_JOB_LOG,但如果您等待 5 分钟,您应该会看到行:

SQL> select job_name, log_date, status from user_scheduler_job_log 
      WHERE job_name = 'THIS_IS_DA_NAME';

JOB_NAME        LOG_DATE                            STATUS
--------------- ----------------------------------- -------------
THIS_IS_DA_NAME 19-DEC-12 08.15.47.009921 AM -06:00 SUCCEEDED
THIS_IS_DA_NAME 19-DEC-12 08.16.47.009534 AM -06:00 SUCCEEDED
于 2012-12-19T10:18:13.863 回答
0
DBMS_SCHEDULER.enable ('THIS_IS_DA_NAME');

and then try your code or this:

begin
  dbms_scheduler.create_job(
      job_name => 'THIS_IS_DA_NAME',
      job_type => 'PLSQL_BLOCK',
      job_action => 'BEGIN PROC_MYSTOREDPROC; END;',
      start_date => sysdate + (5/(24*60)),
      repeat_interval => 'FREQ=MINUTELY; interval=1',
      enabled => TRUE,
      comments => 'Runtime: Every day every minute');
end;
于 2012-12-19T10:27:17.743 回答