ITPub博客

首页 > 数据库 > Oracle > 管理JOB队列

管理JOB队列

Oracle 作者:mhf0791 时间:2013-12-14 14:49:33 0 删除 编辑

Oracle9i中和JOB有关的初始化参数只剩下一个:job_queue_processes。设置job进程的数量。这个初始化参数的最大值由8i的36个增加到了1000个。由CJQ0进程负责唤醒job进程J000~J999对Oracle中的JOB进行处理。

由于采用了这种机制,9i中的JOB总会比设置的NEXT_DATE晚几秒。为了保证多次运行的JOB不会由于这种不准确的因素而造成时间偏移,最好使用TRUNC函数设立JOB运行时间的基准。

Oracle文档上关于JOB失败的情况描述的不很准确。JOB失败后,Oracle会在2分钟左右去再次执行,如果还是执行失败,会在4分钟后重试,然后是8分钟、16分钟。直到遇到3种情况,否则每次重试的时间都会翻倍。

1.执行成功,这时清除失败次数,恢复正常时间间隔。

2.重试16次后,Oracle将JOB设置为BROKEN,停止再次重试。

3.重试的时间超过INTERVAL设置的值,至此以后,Oracle都会以INTERVAL为间隔进行重试,直到上面的两种情况出现。

关于JOB的一些特点:

JOB会对what中进行的操作自动提交;

同时使用数据库链和JOB时应该提供用户名和密码,匿名数据库链会失败;

如果将INTERVAL或者NEXT_DATE设置为NULL,则下次JOB不会再次执行,且会从JOB队列中自动删掉;

通过EXP和IMP可以导出导入JOB(只能通过SCHEMA和DATABASE模式导出,不能单独导出),但是如果JOB号已经在目的数据库中存在,则JOB无法导入;

DBMS_JOB的SUBMIT和REMOVE等过程需要COMMIT;

和JOB有关的视图:DBA_JOBS和DBA_JOBS_RUNNING。

 

 创建JOB   
  SQL>   variable   job1   number;   
  SQL>     
  SQL>   begin   
      2     dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440');  --每天1440分钟,即一分钟运行test过程一次   
      3     end;   
      4     /   
   

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23307241/viewspace-1116089/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-02-06