分类: Oracle
2007-03-08 09:53:35
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。