我现在有一个job需要每10分钟执行一次作业,
我是用游标对数据进行循环处理的,因为数据在处理的时候还在不断增加,等这批数据处理完毕,可能需要2,3个小时,这样,在本次作业刚开始执行的时候才加进来的数据,就需要等2,3个小时,也就是这次作业完毕后,才会被处理,这样就造成很大的延迟,不知道有没有什么办法,就算job这次还没有执行完毕,只要下个10分钟到了,就另启动一个线程进行作业。高手请指教

解决方案 »

  1.   

    还在问啊,实在不能缩短执行时间,定时exec dbms_job.broken(:job)来停止job
      

  2.   

    把这个JOB1修改成只执行一次,每次进这个JOB1的时候,用PL/SQL在你的任务存储过程中新建一个JOB2,此JOB2中写你想做的操作
    job1
       procudure1
       begin
        ..............
        create job2()
       end;job2
       procedure2
       begin
       create job2(procedure2,.....)
       业务操作
       end
    job1不执行任何任务,只负责首次启动JOB2,JOB2每次执行后,先创建JOBx,然后执行实际业务操作
      

  3.   

    放到crontab 中 行不?
    计划任务?
      

  4.   

    最好修改你的游标语句,如果按照你说的那样,job每次执行需要2-3个小时,那么就算你另起线程插入job执行之后的数据,这些数据还是不会参加游标计算的。你只有把job的时间放长,或者说是重构游标语句
      

  5.   

    对建立几个JOB分时间调用就行了啊
    比如原来的
    JOB 开始时间 18:00 间隔时间:10
    现在改为JOB1 开始时间 18:00 间隔时间:60
    JOB2 开始时间 18:10 间隔时间:60
    JOB3 开始时间 18:20 间隔时间:60
    .....
      

  6.   

    关键还是优化你的程序,
    缩短job运行的时间