本人在oracle里写了3个定时器,都是在凌晨2点执行。
但是一开始执行了1次,后面就都不执行了。RUN了。也不行。
delare jobno number;
 begin
dbms_job.submit(jobno,what=>'test;',next_date=>trunc(sysdate),interval=>'trunc(sysdate)+1+2/(24)');
commit;
end;begin
dbms_job.run(1);
end;
test为存储过程的名字, dbms_job.run(1);是开始这个定时器。
但是这样他在凌晨2点的时候并没有运行。
在此求教。
oracle10g
有更好的方法的也请赐教一下。
谢谢

解决方案 »

  1.   

    select * from user_jobs;
    看看job的BROKEN列是不是设置成Y了?
      

  2.   


    是N,  
    我本地的oracle9i,有个同事本地的是10g
    我们两本地的就执行的很好。没有问题。但是服务器上的就是不行
      

  3.   

    对了,数据库服务器是 linux 系统
      

  4.   

    begin
    dbms_job.run(1);
    end;这里后面加上commitbegin
    dbms_job.run(1);
    commit;
    end;
      

  5.   

    老的job删掉,重新建了执行。
    记得dbms_job的每个方法之后都要commit.你的job是凌晨2点,你是调服务器时间来看有没有执行吗?
      

  6.   

    老的肯定是删掉的.
    刚才你说要加上commit,
    我就吧时间换成5分钟一执行.但是还是不可以
      

  7.   

    delare jobno number;
     begin
    dbms_job.submit(jobno,what=>'test;',next_date=>trunc(sysdate),interval=>'trunc(sysdate)+1+2/(24)');
    commit;
    end;后面加上 /
      

  8.   

    delare jobno number;
     begin
    dbms_job.submit(jobno,what=>'test;',next_date=>trunc(sysdate),interval=>'trunc(sysdate)+1+2/(24)');
    commit;
    end;
    /
    begin
    dbms_job.run(1);
    end;
    /
      

  9.   

    SQL> create table job_log(dt date);Table created.SQL> create or replace procedure test as
      2  begin
      3    insert into job_log values(sysdate);
      4    commit;
      5  end;
      6  /Procedure created.SQL> declare
      2    jobno number;
      3  begin
      4    dbms_job.submit(jobno,what=>'test;',
      5      next_date=>trunc(sysdate),interval=>'sysdate+1/(24*60)');
      6    dbms_output.put_line(jobno);
      7    commit;
      8  end;
      9  /
    2537650PL/SQL procedure successfully completed.SQL> begin
      2    dbms_job.run(2537650);
      3    commit;
      4  end;
      5  /PL/SQL procedure successfully completed.SQL> select * from job_log order by dt;DT
    ---------
    2012-09-26 16:27:42
    2012-09-26 16:27:55
    2012-09-26 16:28:58
    2012-09-26 16:29:58
    2012-09-26 16:30:58
      

  10.   

    我在10g上测试的结果。1分钟执行1次。
    你的结果不对,可能是
    1)interval指定有问题。改成5分钟后,不要再trunc(sysdate),否则变成一个过去的时间。
    2)test过程有问题。
      

  11.   


    这样不行哦.
    这样组合运行的那.
    run里面并不知道job的ID
    无法填.
    如果个运行的话就会报 / 的错误.
      

  12.   

    14楼说的是在sqlplus里面运行的时候,需要最后加/,你应该不是在sqlplus里面运行的。
      

  13.   

    begin
    dbms_job.run(1);
    end;
    /delare jobno number;
    begin
    dbms_job.submit(jobno,what=>'test;',next_date=>trunc(sysdate),interval=>'trunc(sysdate)+1+2/(24)');
    commit;
    end;
    /
    那这样试试
      

  14.   

    我根据你这样的弄还是不行,
    不执行,
    存储过程是没问题的
    我直接begin test; end; 运行,都是没问题的
      

  15.   


    同学 你的 服务器的参数 job_queue_process 是不是设置成0 了。
    show parameter job_queue_process
    这个参数是0的话job 相当于关闭了 job 功能,肯定不会自动执行了
    oracle10g开始,推荐大家使用 dbms_scheduler 了,因此把这个参数默认设置成0了。。
      

  16.   


    还真是这个....
    谢谢你了.
    请问下你会写:dbms_scheduler
    会的话帮我写个凌晨2点执行存储过程吧.
    这个东西我不会写.
      

  17.   

    给你大概讲讲 dbms_scheduler 吧,用不用这个东西完全看你的需要的。
    oracle10g开始出现的schedule
    包含对象(列举三个):jobs、program、schedule
    之间关系:schedule 负责调度,即什么时候执行
              program  负责做什么,即执行什么东西
              job      负责做,即在schedule规定的调度下,执行program
    当然还有其他对象概念, 如窗口(window) 链(chain)等
    用这个包可以更好的控制数据库资源的使用情况,但是需要统筹规划,这也是未来的趋势,不过目前看,你的这个功能还真不需要
      

  18.   

    原来如此,呵呵~
    先要赋予create job权限,例如
    grant create job to dreams1208;然后执行
    begin
      dbms_scheduler.create_job(
        job_name=>'job_test',
        job_type=>'STORED_PROCEDURE',
        job_action=>'test',
        repeat_interval=>'FREQ=DAILY;BYHOUR=2;BYMINUTE=0;BYSECOND=0',
        enabled=>true);
    end;
      

  19.   

    谢谢各位的帮忙.已经解决了.我吧这个参数值改成10就可以了.但是这个参数值必须大于JOB的数量.