如何监控oracle调度执行时间?

问题描述 投票:0回答:1

我在包中有一个过程,因为它可能需要一些时间,它将由后台运行的调度程序作业(dbms_job.submit)调用。如果计划时间太长(一个小时),我需要立即在表中插入一条记录。我怎样才能做到这一点?有简单的方法吗?我不想经常检查scheduler_jobs表,我更喜欢使用事件监听器之类的东西来监控它的性能,只要执行时间达到60分钟,就会触发事件。

oracle listener scheduler monitor
1个回答
0
投票

看看DBMS_SCHEDULER

max_run_duration

该属性指定最大数量 允许作业运行的时间。它的数据类型是

INTERVAL DAY TO SECOND
。如果该属性设置为非零且非 NULL 值,并且作业持续时间超过该值,调度程序将引发 类型为
JOB_OVER_MAX_DUR
的事件。然后由您的事件处理程序决定 决定是否允许作业继续进行。

我从来没有使用过它,但看起来你必须使用

DBMS_SCHEDULER.CREATE_EVENT_SCHEDULE
来监听这个事件。

DBMS_SCHEDULER.CREATE_EVENT_SCHEDULE (
   schedule_name => max_execution_time_exceeded,
   event_condition => 'tab.user_data.event_type = ''JOB_OVER_MAX_DUR''');

然后使用它来创建立即在表中插入记录的作业,并可选择终止长时间运行的作业。

DBMS_SCHEDULER.CREATE_JOB (
   job_name => ...,
   job_type => 'PLSQL_BLOCK',
   job_action => ...,
   schedule_name => 'max_execution_time_exceeded'
)

如前所述,到目前为止,我自己从未使用过它,但它让您了解它应该如何工作。

© www.soinside.com 2019 - 2024. All rights reserved.