我建了个job 定时执行一个过程job如下:      begin
  sys.dbms_job.submit(job => :job,
                      what => 'refresh;',
                      next_date => to_date('14-02-2012 06:31:06', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'sysdate+12/24');
  commit;
end;
/过程如下:
             create or replace procedure refresh Is
  v_msg Varchar2(500);
begin  --防止视图失败,重新编译物化视图
  execute immediate 'alter materialized view AAA compile';  --增量刷新物化视图
  begin
    dbms_mview.refresh('AAA');
  Exception
    When Others Then
      v_msg := Sqlerrm;
  end;
      Commit;  end refresh;1、从oracle中看该job是定时执行的,但是数据没有增量刷上来,手工test该过程是没问题的,数据都能刷上来!我现在想问下这个问题可能出在哪里?

解决方案 »

  1.   


    那是下次执行 在 '14-02-2012 06:31:06‘ 今天该job已经跑过了,只是数据没刷上来,现在手工runjob和 test那个过程都能刷上来数据,就是让它自动跑数据刷不上来,
      

  2.   

    begin
      sys.dbms_job.submit(job => :job,
      what => 'refresh;',
      next_date => to_date('14-02-2012 06:31:06', 'dd-mm-yyyy hh24:mi:ss'),
      interval => 'sysdate+1/480');
      commit;
    end;改一下这个间隔时间,再试试。现改成 3分钟,执行一次。估计就能测试出来。 
      

  3.   


    还是不行,我看user_job这张表里,last_date是2012-02-15 9:46:03 
    broken 是N
    falures 是0
    表明这个任务刚刚执行过啊,只是这个任务显示的是执行,但物化视图的增量没有刷上来!
      

  4.   

    经测试,下述可行:
    declare   test_job number;      
    begin  
        sys.dbms_job.submit(job => test_job,          --调用的存储过程   
                            what => 'test;',            --调用的存储过程
                            next_date => to_date('15-02-2012 10:32:06', 'dd-mm-yyyy hh24:mi:ss'),       --下一次执行时间   
                            interval => 'SYSDATE + 30/(60*24*60)');--执行间隔   
      commit;   
      dbms_job.run(test_job);  
    end;  
      

  5.   


    JOB 肯定是没错的 每天还在跑,但是增量数据没有刷上来!现在就是手工run那个job和 手工test那个过程,数据也上来。感觉很奇怪!
      

  6.   

    我把同样的语句复制过来在 oracle10.2.0.1.0上运行,windowsxp平台,没有问题。生产库的oracle版本是10.2.0.3.0-64bi  装载HPUX 上,只有这个区别了
      

  7.   

    朋友说 :我也碰到过这种情况,我写了一个存储过程调用oraclejava代码。
    也是不能。必须run。我重启了后就好了。但是我是生产库不能重启。