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 失败。
| 归档时间: |
|
| 查看次数: |
8947 次 |
| 最近记录: |