oracle创建了定时job在测试环境中正常执行了,但是在正式环境中没有执行,也查看了job_queue_processes值是5,jobs只有三个。

解决方案 »

  1.   

    把创建JOB的脚本贴一下
      

  2.   

    declare
        v_jobnum     number;
        v_job   number;
    begin
        SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;';
        if v_jobnum>0 then
            dbms_job.remove(v_job);
        end if;    SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;';
        if v_jobnum>0 then
            dbms_job.remove(v_job);
        end if;    /* 创建一个ORACLE的JOB定时任务,在每天晚上0:00自动调用 P_ALL_JOBS 过程 */
        dbms_job.submit(job => v_jobnum, what => 'ES_DBA.P_ALL_JOBS;',next_date => TRUNC(SYSDATE) + 1,interval => 'TRUNC(SYSDATE) + 1');    commit;
    end;
    /
    exit;
      

  3.   

    declare
        v_jobnum     number;
        v_job   number;
    begin
        SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;';
        if v_jobnum>0 then
            dbms_job.remove(v_job);
        end if;    SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;';
        if v_jobnum>0 then
            dbms_job.remove(v_job);
        end if;    /* 创建一个ORACLE的JOB定时任务,在每天晚上0:00自动调用 P_ALL_JOBS 过程 */
        dbms_job.submit(job => v_jobnum, what => 'ES_DBA.P_ALL_JOBS;',next_date => TRUNC(SYSDATE) + 1,interval => 'TRUNC(SYSDATE) + 1');    commit;
    end;
    /
    exit;
      

  4.   

    写法有点问题
     SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;';
        if v_jobnum>0 then
            dbms_job.remove(v_job);
        end if;    SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;';
        if v_jobnum>0 then
            dbms_job.remove(v_job);
        end if;
    这种写法会把自己本身这个JOB也删除掉,是不是应该把自身排除掉?
      

  5.   

    你这种写法,其实并没有指定要删除哪个JOB,取的值是MAX(JOB)
    这个JOB在测试库和正式环境很可能是不同的,测试库MAX(JOB)可能是A, 正式环境可能就是取到了本身自己的JOB
      

  6.   

    你这个JOB的目的是什么?看上去很含糊,只删除一个JOB,而且JOB还不指定
      

  7.   

    这个JOB主要就是将当前表的操作日志插入到历史表中并清空。
      

  8.   

    我想要执行的job是9,所以脚本取的值是MAX(JOB)就会有问题,而测试库上执行的job是11,而恰好11这个job是最大的所以就没有问题?
      

  9.   

    没看明白你的逻辑,贴图是正式还是测试环境?
    从贴图来看,会删除JOB11。如果本身就是11的话,会把自身移除,为什么会没问题?
    另外JOB10不用删除吗?如果你的目的是’将当前表的操作日志插入到历史表中并清空‘,为什么要生成多个JOB来处理呢?一个JOB就能实现我想要执行的job是9,所以脚本取的值是MAX(JOB)就会有问题,而测试库上执行的job是11,而恰好11这个job是最大的所以就没有问题?