我在数据库上有一份工作,每天早上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'
答案 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失败 预定的工作正在运行。