您的位置:首页 > 数据库 > Oracle

oracle系统包——dbms job用法(oracle定时任务)

2015-10-30 14:26 531 查看
用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务。

一、dbms_job涉及到的知识点

1、创建job:

variablejobnonumber;

dbms_job.submit(:jobno,—-job号

'your_procedure;',—-执行的存储过程,';'不能省略

next_date,—-下次执行时间

'interval'—-每次间隔时间,interval以天为单位

);

–系统会自动分配一个任务号jobno。

2、删除job:dbms_job.remove(jobno);

3、修改要执行的操作:job:dbms_job.what(jobno,what);

4、修改下次执行时间:dbms_job.next_date(jobno,next_date);

5、修改间隔时间:dbms_job.interval(jobno,interval);

6、启动job:dbms_job.run(jobno);

7、停止job:dbms.broken(jobno,broken,nextdate);–broken为boolean值

二、初始化相关参数job_queue_processes

1、job_queue_process表示oracle能够并发的job的数量,当job_queue_process值为0时表示全部停止oracle的job。

2、查看job_queue_processes参数

方法一:

showparameterjob_queue_process;

方法二:

select*fromv$parameterwherename='job_queue_processes';

3、修改job_queue_processes参数

altersystemsetjob_queue_processes=10;

三、user_jobs表结构

字段(列)类型描述

jobnumber任务的唯一标示号

log_uservarchar2(30)提交任务的用户

priv_uservarchar2(30)赋予任务权限的用户

schema_uservarchar2(30)对任务作语法分析的用户模式

last_datedate最后一次成功运行任务的时间

last_secvarchar2(8)如hh24:mm:ss格式的last_date日期的小时,分钟和秒

this_datedate正在运行任务的开始时间,如果没有运行任务则为null

this_secvarchar2(8)如hh24:mm:ss格式的this_date日期的小时,分钟和秒

next_datedate下一次定时运行任务的时间

以下使用一个案例来演示dbms_job的使用

一、在plsql中创建表:

1
2
3
4
create
table
t(

idvarchar2(30),

name
varchar2(30)

);


二、在plsql中创建存储过程:

1
2
3
4
5
6
create
or
replace
procedure

proce_t
is

begin

insert
into
t(id,

name
)
values
(
'1'
,to_char(sysdate,

'yyyy-mm-ddhh24:mi:ss'
));

commit
;

end
proce_t;

/


三、创建job任务(1分钟执行一次):

在sql>后执行:

1
2
3
4
5
6
variablejobnonumber;

begin

dbms_job.submit(:jobno,
'proce_t;'
,sysdate,

'sysdate+1/24/60'
);

commit;

end;

/


提交后提示:

1
2
3
4
pl/sqlproceduresuccessfullycompleted

jobno

---------

25


四、跟踪任务的情况(查看任务队列):

1
2
3
4
5
sql>
select
job,next_date,next_sec,failures,broken

from
user_jobs;


jobnext_datenext_secfailuresbroken

-----------------------------------------------------

252012/9/14110:59:460n


说明任务已创建成功。

执行select*fromt;查看定时任务的结果。可以看出定时任务是正常执行了的。

五、停止定时任务

1、查看定时任务的job号。

1
2
3
4
5
sql>
select
job,next_date,next_sec,failures,broken

from
user_jobs;


jobnext_datenext_secfailuresbroken

-----------------------------------------------------

252012/9/14111:01:480n


2、停止一个已启动的定时任务:

1
2
3
4
5
begin

dbms_job.broken(25,
true
,sysdate);

commit
;

end
;

/


表示停止job为25的任务。

执行后显示如下:

pl/sqlproceduresuccessfullycompleted

3、查看定时任务是否已停止成功

1
2
3
4
5
sql>
select
job,next_date,next_sec,failures,broken

from
user_jobs;


jobnext_datenext_secfailuresbroken

-----------------------------------------------------

254000/1/100:00:000y


broken值为y,表示定时任务已停止。

六、启动定时任务

1、查看停止定时任务

1
2
3
4
5
sql>
select
job,next_date,next_sec,failures,broken

from
user_jobs;


jobnext_datenext_secfailuresbroken

-----------------------------------------------------

254000/1/100:00:000y


broken值为y,表示定时任务已停止。

2、启动定时任务

1
2
3
4
5
begin

dbms_job.run(25);

commit
;

end
;

/


3、查看定时任务是否已启动

1
2
3
4
5
sql>selectjob,next_date,next_sec,failures,brokenfromuser_jobs;


jobnext_datenext_secfailuresbroken

-----------------------------------------------------

25
2012
/
9
/
14
1

11
:
06
:
17
0

n


broken值为n,表示定时任务启动成功。

七、查看进程数

showparameterjob_queue_processes;

必须大于0,否则执行下面的命令修改:

altersystemsetjob_queue_processes=10;

八、再创建一个任务(每5分钟执行一次):

1
2
3
4
5
6
variablejobnonumber;

begin

dbms_job.submit(:jobno,
'proce_t;'
,sysdate,

'sysdate+1/24/12'
);
--interval是以天为单位的

commit
;

end
;

/


、执行selectjob,next_date,next_sec,failures,brokenfromuser_jobs;

结果:

1
2
3
4
5
6
sql>selectjob,next_date,next_sec,failures,brokenfromuser_jobs;


jobnext_datenext_secfailuresbroken

-----------------------------------------------------

262012/9/14111:12:080n

252012/9/14111:07:180n


十、总结

关于job运行时间

1:每分钟执行

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

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的运行频率设置

1.每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1)+(8*60+10)/24*60

2.Toad中提供的:

每天:trunc(sysdate+1)

每周:trunc(sysdate+7)

每月:trunc(sysdate+30)

每个星期日:next_day(trunc(sysdate),'星期日')

每天6点:trunc(sysdate+1)+6/24

半个小时:sysdate+30/(24*60)

3.每个小时的第15分钟运行,比如:8:15,9:15,10:15…:trunc(sysdate,'hh')+(60+15)/(24*60)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: