【问题标题】:manually running a scheduled job. LAST_RUN_DATE is not updating手动运行计划的作业。 LAST_RUN_DATE 未更新
【发布时间】:2017-10-01 13:52:34
【问题描述】:

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

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

我通过跑步来做到这一点

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' 

【问题讨论】:

  • “看起来不对”:请详细说明。

标签: oracle plsql dbms-scheduler


【解决方案1】:

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 设置为 TRUE 时:

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

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

RUN_JOB 可以与定期安排的作业运行并行运行。

当 use_current_session 设置为 FALSE 时:

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

【讨论】:

  • 谢谢。这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 2010-09-12
相关资源
最近更新 更多