oracle job

来源:百度文库 编辑:神马文学网 时间:2024/04/29 22:50:58
--oracle自动调用存储过程 ,注’作业调度‘和’任务‘是同义词。1 Oracle定时执行“JobQueue”的后台程序是SNP进程,所以要启动SNP进程,
首先,要确保整个系统的模式是可以启动SNP进程的,
    以DBA的身份去执行如下命令:
     svrmgrl> alter system disenable restricted session;
     或sql> alter system disenable restricted session;
然后,修改初始化文件:
job_queue_process=n               SNP进程的启动个数,缺省值为0,正常定义范围为0~36
job_queue_interval=N              系统每隔N秒唤醒该进程一次,缺省值为60秒,正常范围为1~3600秒2 语法

dbms_job.submit( job               out     binary_integer,     输出变量,此任务在任务队列中的编号
                 what       in   archar2,            要执行的过程名或函数名
                 next_date     in   date,              任务执行的时间
                 interval     in   varchar2,           上一次执行结束到下一次开始执行的时间间隔,
                                                               当interval设置为null时,该job执行结束后,就被从队列中删除。
                                                               周期性地执行,则要用‘sysdate+m’                                                              
                 no_parse     in   boolean
               ) 确保该用户拥有执行包dbms_job的权限,若没有,需要以DBA的身份将权利授予该用户。
grant execute on dbms_job to bill; 一些查看
数据字典user_jobs
select * from user_jobs;或
select job,next_date,next_sec,failures,broken from user_jobs;
job       next_date       next_sec     failures     broken
300       2000/10/10      11:45:15     0           N
这表示任务号为300的任务,下一次将在2000/10/10 11:45:15执行,此任务的执行失败记录为0次。
当执行job出现错误时,Oracle将其记录在日志里,失败次数每次自动加1。当执行失败次数达到16时
,Oracle就将该job标志为broken。此后,Oracle不再继续执行它,直到用户调用过程dbms_job.broken,
重新设置为not broken,或强制调用dbms_job.run来重新执行它。
其它包
dbms_job.change 、 dbms_job.what、dbms_job.interval可以用来修改提交的任务。
 
--删除作业调用,n表示作业序号
begin
dbms_job.remove(n);
end;
/
测试:
--------------------------------------------
create table tab_wj(indate date,mn number);
--------------------------------------------
create or replace procedure wjjtest is
    varn number;
begin
    varn:=123;
    insert into tab_wj values(sysdate,varn);
    commit;
end;
--------------------------------------------
declare
 n number;begin   sys.dbms_job.submit(
   job        =>n,
   what       =>'wjjtest;',
   next_date  =>to_date('200708241545','yyyymmddhh24mi'),
   interval   =>'sysdate+1/24/20',
   no_parse   => TRUE);
  
   commit;end;
--------------------------------------------