手动运行计划作业。LAST_RUN_DATE 未更新

kev*_*670 3 oracle plsql dbms-scheduler

我有一项使用 DBMS 调度程序在每晚凌晨 1 点运行的数据库上的工作。

我还希望能够随时手动运行该作业。

我通过运行来做到这一点

execute dbms_scheduler.run_job('JOB_NAME');
Run Code Online (Sandbox Code Playgroud)

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

这是我查找LAST_RUN_DATE的查询,

SELECT LAST_START_DATE 
   FROM DBA_SCHEDULER_JOBS 
WHERE job_name='JOB_NAME';
Run Code Online (Sandbox Code Playgroud)

我的解决方法是使用它来获取最后日期,但似乎不对:

select log_date, job_name, status, run_duration
  from dba_scheduler_job_run_details 
where job_name='JOB_NAME' 
Run Code Online (Sandbox Code Playgroud)

小智 6

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

execute dbms_scheduler.run_job('JOB_NAME', use_current_session => false);
Run Code Online (Sandbox Code Playgroud)

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

12.1 文档(重点是我的):

使用当前会话:

这指定作业运行是否应在调用该过程的同一会话中发生。作业始终作为作业所有者在作业所有者的架构中运行,除非它指定了凭据,然后作业使用名为的用户运行在凭据中。

当 use_current_session 设置为 TRUE 时:

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

*_scheduler_jobs 的 state、run_count、last_start_date、last_run_duration 和 failure_count 未更新。

RUN_JOB 可以与定期调度的作业运行并行运行。

当 use_current_session 设置为 FALSE 时:

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