如题,初次使用dbms_job时间设置,本来想设成 一天一次 ,sysdate+1 结果 间隔是1天多  ,测试的时候 设置成sysdate+1/24看了下记录,大约是 8小时 32分执行一次  这是怎么回事?是不是配置那没配置好?  本人菜鸟  测试半个月了 实在不知道怎么解决 请各位大神指点指点

解决方案 »

  1.   

    楼主:可以先了解这个trunc(sysdate) 这是什么意思。时间截断函数,只到日期,去掉时、分、秒。例如: 每天22时定时启动
    间隔: trunc(sysdate+1)+22/24  
      

  2.   


    repeat_interval=>'freq=daily; byhour=23'--第天晚11点执行
      

  3.   

    variable job number;
    begin
                dbms_job.submit(job => :job,
                                    what => 'p_maxnologin;',
                                    next_date => trunc(sysdate)+1/24,
                                    interval => 'trunc(sysdate)+1+1/24');
                commit;
    end; 
    /
      

  4.   

    任务重复运行的时间间隔取决于interval参数中设置的日期表达式。最简单的需求是特定的时间间隔后,重复运行该任务。例如天运行一次'sysdate+1'。
    这样可能带来的问题是不能保证任务的下一次运行的准确时间。
    比如第一次运行在午夜12点,这样以后每次运行理论上都在午夜12点。
    但是如果某用户在上午8点使用run过程执行了该任务,以后该任务重新定时到上午8点运行。
    另外如果数据库关闭或者说任务队列非常的忙以至于任务不能在计划的那个时间点准时执行,
    都可能运行时间的不断“漂移”。另一种需求是需要要任务在特定时间执行,下面是一些例子。
    #每天午夜12点 'TRUNC(SYSDATE + 1)' 
    #每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' 
    #每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24' 
    #每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)' 
    #每季度的第一天凌晨1点 'TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24'
    #每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
    #每年1月1日凌晨1点执行 'add_months(trunc(sysdate,''yyyy''),12)+1/24'
    #每星期六和日上午11点 'trunc(least(next_day(sysdate,7),next_day(sysdate,1)))+(11*60)/(24*60)'
      注:1-星期天 2-星期1 3-星期2 ... 7-星期6