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);