【问题标题】:Cleanly end plsql procedure started by Oracle Scheduler干净地结束由 Oracle 调度程序启动的 plsql 过程
【发布时间】:2019-04-26 15:32:36
【问题描述】:

我有一个调用 pl/sql 包过程的计划作业。
目前,如果过程完成或超过基于配置表中设置的值的时间范围(作业执行时间范围为上午 12 点到凌晨 3 点),该过程将自行退出。

如果过程超出了允许执行的时间范围,我想使用 Oracle 调度程序功能干净地结束过程。 有没有办法做到这一点?

Oracle 12.2 版

【问题讨论】:

    标签: oracle plsql scheduled-tasks


    【解决方案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;
    /
    

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        猜你喜欢
        • 2010-10-26
        • 2015-07-28
        • 1970-01-01
        • 2013-03-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-21
        • 1970-01-01
        • 2013-01-24
        相关资源
        最近更新 更多