2017-05-03 37 views
0

我在数据库上有一份工作,每天凌晨1点使用DBMS调度程序运行。手动运行预定作业。 LAST_RUN_DATE没有更新

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

我通过运行

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

“看起来不太合适”:请详细说明。 –

回答

2

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:

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

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

RUN_JOB可以与定期运行的作业同时运行。

当use_current_session设置为FALSE:

您需要查看作业日志找到错误信息。 更新* _scheduler_jobs中的所有相关 字段。如果正常运行 预定作业,则RUN_JOB会失败。

+0

谢谢。这正是我所期待的。 – kev670