大家好!兄弟初用Oracle,遇到下面一个问题,不知如何求解,特来求助,望赐教:简化一下大概是这样的:
航班信息表:
================================
航班号        起飞时间
--------------------------------
CA9900        2010-7-27 08:00:00
CA9230        2010-7-27 08:40:00
CA9450        2010-7-27 08:50:00
CA9460        2010-7-27 11:00:00
……………………需求:
每个航班起飞之前24小时、12小时、6小时、3小时、30分钟各执行一次存储过程: SP_TEST(航班号);情况:
[航班信息表]中会有源源不断的新数据进入,总之,数据量比较大。问题:
我知道Oracle中有dbms_job,但本需求感觉比较复杂,不知道敢不敢用dbms_job来实现?如果用dbms_job的话,每隔XX秒(or 分钟)就遍历表并执行过程,会不会给数据库带来较大压力?有没有其它适合此场景的方案?
望专家们多多赐教!不胜感激!

解决方案 »

  1.   

    你这个需求是实时监控表的数据,而且你表的数据在不断变化的,
    你的JOB粒度和精确性要很高?可以偏差多少?一分钟?5分钟?
      

  2.   

    你的JOB里的操作相当于5分钟查询一次这个表,然后再去执行相应的存储过程,
    你先测试下每次遍历消耗的时间和资源...时间是否有索引...
      

  3.   

    可以尝试
    航班信息表加时间索引,分 24小时、12小时、6小时、3小时、30分钟 这5个时段的5个job执行 
    未做尝试,只提想法
      

  4.   

    感觉这样效率还是太低,开销还是太大了系统很庞大,航班信息表可能有上百上千万数据我准备这样做:每天凌晨扫描航班信息表,把接下来3天的航班信息select出来,根据其起飞时间,分别将起飞时间前的5个时段记录到一张专门的队列表中(5条记录)。然后开一个job,定时扫描这个队列并执行就OK了。大家觉得如何?有没有什么建议?
      

  5.   

    最好是用crontab吧,job这个技术说真的有时候是不可靠的。