环境:
    操作系统:windows server 2008 r2
    数据库版本:oracle 11g r2遇到的问题:    
        昨天在测试服务器上创建了一个调度任务,任务内容是每过一分钟,对一个表的数据进行按时段分组统计,并将结果插入一个统计表。
        测试过程很顺利,生成了很多统计数据,但今天发现这个调度没有运行。
        于是看了一下调度信息表:
        /*查看下一个任务*/
        SELECT JOB, NEXT_DATE, NEXT_SEC, BROKEN FROM USER_JOBS;        发现结果是:
        1 45 2015/6/1 17:41:00 17:41:00 N
        
        原来昨天5点40分关了服务器下班了,调度任务设置了下一个调用时间是5点41分,今天服务器启动了,由于时间已经超过这个时间了,所以就一直没有运行这个任务。
    
        需要解决的问题:   
                在生产环境中,机房是有可能会宕机的,有时候回来停电的情况出现,虽然很少,但是确实是有,这种情况怎么处理呢?怎么才能让他一直按照设定的时间间隔运行下去呢?我分不多,希望能有人指点一下,万分感谢!

解决方案 »

  1.   

    我现在有个思路,如果这样无法解决,我在想,从我需求上来分析,我要的功能是:        有个数据量很大的表,这个表主要是记录过往车辆的卡口表,在这个表上有个触发器,是设置在插入操作上的,插入的时候触发一个操作是吧要插入的数据保存到一个表结构一样的临时表中,这个表保存3分钟的数据,超过3分钟就删除头一分钟的数据,然后有一个调度任务,本来是要从这个临时表做一个时段分组统计,以分钟为单位,每分钟统计一次的,但现在这个调度任务可能会出我遇到的问题而不执行,就影响了以后的数据统计,如果不能解决的话,能不能从其他方面绕过去?      我想到的解决方案:
          在这个表的触发器上打主意
          1.从临时表中读取最后一条数据的时间信息
          2.与sysdate做比较,如果大于一分钟,则统计一次数据并插入到统计数据表中
          3.获取临时表第一条数据的时间
          4.如果第一条数据的时间和现在插入的数据的时间超过了3分钟,则删掉2分钟前的数据       这样做有点麻烦的就是,我要维护两个操作,从时间上来判断是否统计数据,从时间上来判断是否删除数据。      我知道这样做起来很麻烦,有办法能让调度任务按照设置时段运行吗?即使宕机也能重新运行?如果不行我就只有考虑这个办法了。