手动运行预定作业。 LAST_RUN_DATE未更新

时间:2017-05-03 16:02:31

标签: oracle plsql dbms-scheduler

我在数据库上有一份工作,每天早上1点使用DBMS调度程序运行。

我还希望能够在任何时候手动运行作业。

我是通过运行

来做到这一点的
execute dbms_scheduler.run_job('JOB_NAME');

这一切正常并且作业确实运行,但是当我在 DBA_SCHEDULER_JOBS 上查找作业时, LAST_RUN_DATE 列仍然只保留作业上次运行的日期从调度程序(凌晨1点)而不是我手动运行它。这对任何人都有意义吗?我希望能够最后一次运行作业,这样我就可以向用户显示它的运行情况。

这是我正在查找 LAST_RUN_DATE 的查询,

SELECT LAST_START_DATE 
   FROM DBA_SCHEDULER_JOBS 
WHERE job_name='JOB_NAME';

我的工作是使用它来获取最后一个日期,但它似乎不正确:

select log_date, job_name, status, run_duration
  from dba_scheduler_job_run_details 
where job_name='JOB_NAME' 

1 个答案:

答案 0 :(得分:4)

dbms_scheduler.run_job上的可选参数use_current_session在省略时默认为TRUE。将此参数设置为FALSE将更新last_start_date:

execute dbms_scheduler.run_job('JOB_NAME', use_current_session => false);

但是,通过设置此参数可能会产生其他副作用。有关更多详细信息,请参阅Oracle文档以获取特定的Oracle版本。

12.1 docs (强调我的):

  

use_current_session:

     

指定作业是否应该在同一个中运行   从中调用过程的会话。作业总是作为   作业所有者,在作业所有者的架构中,除非它具有凭证   如果已指定,则作业将使用凭证中指定的用户运行。

     

当use_current_session设置为TRUE时:

     

您可以在命令行上测试作业并查看任何可能的错误。

     

州,run_count,last_start_date,last_run_duration和   * _scheduler_jobs的failure_count未更新。

     

RUN_JOB可以与定期计划的作业并行运行。

     

当use_current_session设置为FALSE时:

     

您需要检查作业日志以查找错误信息。 所有相关的   * _scheduler_jobs中的字段已更新。如果定期,则RUN_JOB失败   预定的工作正在运行。