干净地结束Oracle Scheduler启动的plsql过程

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

我有一个调用pl / sql包过程的预定作业。 目前,如果程序完成或者超过基于配置表中设置的值的时间范围(作业执行时间范围12AM到3AM),则程序将自行退出。

如果超过允许执行的时间范围,我想使用Oracle Scheduler功能干净地结束该过程。反正有没有这样做?

Oracle版本12.2

oracle plsql scheduled-tasks
2个回答
0
投票

DBMS_SCHEDULER.CREATE_JOB程序允许您为作业设置许多属性,包括max_run_duration

https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sched.htm#CIHBCCJI

这是一个老问题,涵盖了这个:

https://dba.stackexchange.com/questions/21540/why-does-dbms-scheduler-max-run-duration-not-raise-event-job-over-max-dur


1
投票

也许通过运行另一个工作来终止它?安排这项工作每天凌晨3点运行。这是JOB_ACTION看起来像

DECLARE
     v_state user_scheduler_jobs.state%TYPE;
    BEGIN
    SELECT state
         INTO v_state
     FROM user_scheduler_jobs
           WHERE job_name = 'MY_JOB_NAME';

    IF v_state = 'RUNNING' THEN
       DBMS_SCHEDULER.STOP_JOB(job_name=>'MY_JOB_NAME',force =>true);
    END IF;

 EXCEPTION 
   WHEN NO_DATA_FOUND THEN
  DBMS_OUTPUT.PUT_LINE('THE JOB MY_JOB_NAME IS NOT FOUND');

END;
/
© www.soinside.com 2019 - 2024. All rights reserved.