第四章 job定时器

JOB定时器

定时器就是定时来完成某些操作的。
查看定时器的详细信息,查询数据库字典 user_jobs :
select job,next_date,next_sec,broken from user_jobs;

一、过程:
包含以下子过程: 
  Broken()过程。
  change()过程。
  Interval()过程。
  Isubmit()过程。
  Next_Date()过程。
  Remove()过程。
  Run()过程。
  Submit()过程。
  User_Export()过程。
  What()过程。
1)Broken()过程 更新一个已提交的工作的状态,典型地是用来把一个已破工作标记为未破工作。
  这个过程有三个参数:job 、broken与next_date。
   标识,已破未破参数,再次运行时间
  PROCEDURE Broken (job IN binary_integer,
            Broken IN boolean,
            next_date IN date :=SYSDATE)
  
  job参数 是工作号,它在问题中唯一标识工作。
  broken参数 指示此工作是否将标记为破:已破为y,未破为N。
  next_date参数 指示在什么时候此工作将再次运行。此参数缺省值为当前日期和时间。
  job如果由于某种原因未能成功之行,oracle将重试16次后,还未能成功执行,将被标记为broken重新启动状态为broken的job,有如下两种方式;
  a、利用dbms_job.run()立即执行该job
    sql>begin
    sql>dbms_job.run(:jobno) 该jobno为submit过程提交时返回的job number
    sql>end;
    sql>/
  b、利用dbms_job.broken()重新将broken标记为false
    sql>begin
    sql>dbms_job.broken (:job,false,next_date)
    sql>end;
    sql>/
2、Change()过程 –改变指定工作的设置。
  这个过程有四个参数:job、what 、next_date与interval。
   标识,语句块或存储,执行工作的时间,执行工作的频率
  PROCEDURE Change (job  IN binary_integer,
            what  IN varchar2,
            next_date IN date,
            interval  IN varchar2)
  
  此job参数 是一个整数值,它唯一标识此工作。
  What参数 是由此工作运行的一块PL/SQL代码块。
  next_date参数 指示何时此工作将被执行。
  interval参数 指示一个工作重执行的频度。  
3、Interval()过程设置并显示执行工作的时间间隔数
这个过程有两个参数:job与interval。
   标识,重新执行工作的频率
  PROCEDURE Interval (job IN binary_integer,
             Interval IN varchar2)
  
4、ISubmit()过程 用来用特定的工作号提交一个工作。这个过程有五个参数:job、what、next_date、interval与no_parse。
  
  PROCEDURE ISubmit (job   IN binary_ineger,
            What  IN varchar2,
            next_date IN date,
            interval  IN varchar2,
            no_parse IN booean:=FALSE)
  
  这个过程与Submit()过程的唯一区别在于此job参数作为IN型参数传递且包括一个由开发者提供的工作号。如果提供的工作号已被使用,将产生一个错误。
  
5、Next_Date()过程 设定并显示工作的执行时间。这个过程接收两个参数:job与next_date。
   标识存在的工作,工作执行的时间
  PROCEDURE Next_Date(job IN binary_ineger,
             next_date IN date)
  
6、Remove()过程来删除一个已计划运行的工作。这个过程接收一个参数: 定时器移除
  PROCEDURE Remove(job IN binary_ineger);
  job参数唯一地标识一个工作。这个参数的值是由为此工作调用Submit()过程返回的job参数的值。已正在运行的工作不能由调用过程序删除。
  
7、Run()过程 立即执行指定的工作。这个过程只接收一个参数:
 PROCEDURE Run(job IN binary_ineger) 
 job参数标识将被立即执行的工作。
  
8、使用Submit()过程,正常计划好工作。
  这个过程有五个参数:job、what、next_date、interval与no_parse。
标识,PL/SQL语句块,执行工作的时间,执行工作的频率
  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代码应立即进行语法分析。
  
9、User_Export()过程返回一个命令,安排存在的工作便于重新提交
 此程序有两个参数:job与my_call。
标识,重新提交工作正文
  PROCEDURE User_Export(job  IN binary_ineger,
              my_call IN OUT varchar2)
  job参数标识一个安排了的工作。
my_call参数包含在它的当前状态重新提交此工作所需要的正文。
10、What()过程 重新设置正在执行的工作(命令)。
这个过程接收两个参数:job与what。
标识,PL/SQL语句块
  PROCEDURE What (job IN binary_ineger,
           What IN OUT varchar2)
job参数 标识一个存在的工作。
what参数 指示将被执行的新的PL/SQL代码。
二、创建job基本语法:
declare 定义标识变量
begin
dbms_job.定时器过程(值);
end;
三、JOB执行时间

描述  interval 参数值 
每隔 1 分钟执行一次  ‘sysdate + 1/(24*60)’
每天早上8点30分  ‘trunc(sysdate + 1) + (8*60+30)/(24*60)’ 
每天午夜 12 点  ‘trunc(sysdate + 1)’
每星期二中午 12 点  ‘next_day(trunc(sysdate ), ”tuesday” ) + 12/24’ 
每月第一天的午夜 12 点  ‘trunc(last_day(sysdate ) + 1)’
每季度最后一天晚上 11点  ‘trunc(add_months(sysdate , 3 ), ‘Q’ )-1/24’
每星期六和星期日早上 6 点10分    ‘trunc(least(next_day(sysdate, ”saturday”), next_day(sysdate, “sunday”))) + (6×60+10)/ (24×60)’ 
相关的几个Job操作
① 删除job:
dbms_job.remove(jobno);需要commit,rollback
② 修改要执行的操作:dbms_job.what(jobno,what);
③ 修改下次执行时间:
dbms_job.next_date(job,next_date);
④ 修改间隔时间:dbms_job.interval(job,interval);
⑤ 停止job:
dbms.broken(job,broken,nextdate);需要commit,rollback 。 已破是true,也就是Y. N 未破
⑥ 启动job:
dbms_job.run(jobno);

猜你喜欢

转载自blog.csdn.net/weixin_42800008/article/details/81353371
今日推荐