oracle的job没有自动执行

2012-11-12
  写了一个oracle定时,发现无法运行。

  第一步写存储过程代码:

  create or replace procedure prc_update_tgyhxx as

  begin

  insert into 团购优惠信息(集团编号) select s.集团编号 from 团购优惠信息2 s where s.集团编号 not in(select 集团编号 from 团购优惠信息);

  update 团购优惠信息 set(上月用户数,本月新增数,月末用户数,调整折扣,用户手机号码)=(select  ac.用户数1 上月用户数,ac.净增数 本月新增数,ac.净增数+ac.用户数1 月末用户数,case when ac.净增数+ac.用户数1<60 then 90 when ac.净增数+ac.用户数1>60 and ac.净增数+ac.用户数1<70 then 80 when ac.净增数+ac.用户数1>70 and ac.净增数+ac.用户数1<80 then 70 when ac.净增数+ac.用户数1>80 then 60 end 调整折扣,ac.用户手机号码 from (select aaa.集团编号 集团编号1,aaa.用户手机号码,aaa.用户数 用户数1,bbb.集团编号,bbb.净增数,bbb.用户数 from 团购优惠信息1 aaa left join 团购优惠信息2 bbb on bbb.集团编号=aaa.集团编号) ac where ac.集团编号=团购优惠信息.集团编号);

  commit;

  end;

  备注:其实就是执行两条sql语句,一条为insert,一条为update

  第二步就是创建job,代码如下:

  begin

  sys.dbms_job.submit(job => :job,

  what => 'prc_update_tgyhxx;',

  next_date => to_date('04-11-2010 16:14:00', 'dd-mm-yyyy hh24:mi:ss'),

  interval => 'TRUNC(sysdate,''mi'') + 1/ (24*60)');

  commit;

  end;

  /

  到此完成!

  备注:其实我是用【PLSQL Developer】工具创建的job,而且是每分钟执行一次job。

  后来发现问题,该job竟然不执行,在上网查找资料后,我的解决方法是用sys账户以sysdba权限登录执行了以下一条语句

  ALTER SYSTEM SET job_queue_processes = 20;

  commit;

  问题解决,原来job_queue_processes 原来是0,在9i中,job_queue_processes默认是0,job将不能启动。所以要将其设置为大于1的整数。此参数还有另外一层意思,就是并行执行的job的个数,如果此参数设置是10,那么可以同时运行的job个数的上限就是10,假如此时你已经创建了10个job,并全都开始执行,当再创建新job的时候(且当前时间已经满足可以运行此job的时间了),那么这个job将会排队。

  提示:使用sql="show  parameter  job_queue_process"可以查询job_queue_processes的值,但要以sysdba的权限登录。

  考试大温馨提示:本内容来源于网络,仅代表作者个人观点,与本站立场无关,仅供您学习交流使用。其中可能有部分文章经过多次转载而造成文章内容缺失、错误或文章作者不详等问题,请您谅解。如有侵犯您的权利,请联系我们,本站会立即予以处理。

分享到:
0
相关阅读
友情链接
© 2018 我考网 http://www.woexam.com 中国互联网举报中心 湘ICP备18023104号 京公网安备 11010802020116号
违法和不良信息举报:9447029@qq.com