oracle job相关操作

来源:互联网 发布:小米怎么还原网络设置 编辑:程序博客网 时间:2024/06/05 06:23

初始化参数:job_queue_processes

    alter system set job_queue_processes=n;

该参数在数据库安装的时候默认为10,表示为数据库最多允许多少个job同时运行;

当数据库job出现莫名的停止现象,请查看此参数的设置;

该参数最大值为100.

查询:

与job相关的视图:
    dba_jobs
    all_jobs
    user_jobs
    dba_jobs_running (包含正在运行job相关信息)
    select job, what, next_date, next_sec, sysdate, failures, broken,interval from user_jobs ;
   上面sql语句只是示例,其它视图也可查询相应的参数。

添加:

    variable n number;

begin
  dbms_job.submit(:n, 'MY_JOP;', sysdate,'sysdate+2/(24*60*60)');
  commit;
end
;

删除:

     dbms_job.remove(41);
    这里面的41是指job对应的唯一标示,通过上面所说的视图即可查出每个job对应的唯一标示;
    删除的时候需要注意对应的标示不要弄错了。

注:
使用Submit()过程,这个过程有五个参数:job、what、next_date、interval与no_parse。
  PROCEDURE Submit ( job OUT binary_ineger,
            What IN varchar2,
            next_date IN date,
            interval IN varchar2,
            no_parse IN booean:=FALSE)
  
  job 参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作
    what 参数是将被执行的PL/SQL代码块。
  next_date 参数指识何时将运行这个工作
  interval 参数何时这个工作将被重执行
  no_parse 参数指示此工作在提交时或执行时是否应进行语法分析——TRUE指示此PL/SQL代码在它第一次执行时应进行语法分析,而FALSE指示本PL/SQL代码应立即进行语法分析

关于interval参数:

    1:每分钟执行

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

Interval => sysdate+1/1440

2:每天定时执行

例如:每天的凌晨1点执行

Interval => TRUNC(sysdate) + 1 +1/ (24)

3:每周定时执行

例如:每周一凌晨1点执行

Interval => TRUNC(next_day(sysdate,'星期一'))+1/24

4:每月定时执行

例如:每月1日凌晨1点执行

Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24

5:每季度定时执行

例如每季度的第一天凌晨1点执行

Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24

6:每半年定时执行

例如:每年7月1日和1月1日凌晨1点

Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24

7:每年定时执行

例如:每年1月1日凌晨1点执行

Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24

创建job实例:

variable remindjob number;

BEGIN

  SYS.DBMS_JOB.SUBMIT

  ( job       => :remindjob

  ,what => 'declare s1 INT; s2 varchar2(1000); begin PWSYS.P_REMIND_DATA_PERIODIC(s1,s2); end;'

   ,next_date => to_date('07/11/2012 13:57:00','dd/mm/yyyy hh24:mi:ss')

   ,interval  => 'sysdate+60/1440'

   ,no_parse  => FALSE

  );

COMMIT;

END;

/