variable jobno number;
dbms_job.submit(:jobno, --job号
'your_procedure;', --执行的存储过程
next_date, --下次执行时间
'interval' --每次间隔时间,以天为单位
);
系统会自动分配一个任务号jobno
dbms_job.remove(jobno)
job:dbms_job.what(jobno,what)
dbms_job.next_data(jobno,next_date);
dbms_job.interval(jobno,interval);
dbms_job.run(jobno)
dbms.broken(jobno,broken,nextdate);
broken为boolean值
job_queue_process表示oracle能够并发的job的数量,当job_queue_process值为 0 时表示全部停止oracle的job
查看job_queue_process参数
show parameter job_queue_process;
select * from v$parameter where name = ‘job_queue_process’
修改job_queue_process参数
alter system set job_queue_process=10;
job | 任务的唯一标示号 |
---|---|
log_user | 提交任务的用户 |
priv_user | 赋予任务权限的用户 |
schema_user | 对任务作语法分析的用户模式 |
last_date | 最后一次运行任务的时间 |
last_sec | 如 hh24:mi:ss 格式的 last_date 日期的 时分秒 |
this_date | 正在运行任务的开始时间,如果没有运行则为null |
this_sec | 如 hh24:mi:ss 格式的 this_date 日期的 时分秒 |
next_date | 下一次定时运行任务的时间 |
create table t(
id varchar2(30),
name varchar2(30)
)
create or replace procedure proce_t is
begin
insert into t (id,name) values (1,to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’))
commit;
end;
/
variable jobno number;
begin
dbms_job.submit(:jobno, --job号
‘proce_t;’, --执行的存储过程
sysdate, --下次执行时间
‘sysdate+1/24/60’ --每次间隔时间,以天为单位
);
commit;
end;
/
提交后提示:
pl/sql procedure succcessfully completed
jobno
------
25
select job,next_date,next_sec,failures,broken from user_jobs;
1. 查看定时任务的job号
select job,next_date,next_sec,failures,broken from user_jobs;
2. 停止一个已经启动的定时任务
begin
dbms_job.broken(25,ture,sysdate);
commit;
end;
/
表示停止jobno为25的任务
3. 查看定时任务是否已停止成功
select job,next_date,next_sec,failures,broken from user_jobs;
broken值为y,表示定时任务已经停止
select job,next_date,next_sec,failures,broken from user_jobs;
broken值为y,表示定时任务已经停止
begin
dbms_job.run(25);
commit;
end;
/
3、查看定时任务是否已启动成功
select job,next_date,next_sec,failures,broken from user_jobs;
broken值为n,表示定时任务已经停止
show parameter job_queue_processes;
必须大于 0 ,否则执行下面的命令进行修改
alter system set job_queue_processes=10;
variable jobno number;
begin
dbms_job.submit(:jobno, --job号
'proce_t;', --执行的存储过程
sysdate, --下次执行时间
'sysdate + 1/24/12' --每次间隔时间,以天为单位
);
commit;
end;
/
select job,next_date,next_sec,failures,broken from user_jobs;
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、每半年定时执行
例如:每年1.1和7.1凌晨1点执行
Interval => add_months(trunc(sysdate,'yyyy'),6) + 1/24
7、每年定时执行
例如:每年1.1凌晨1点执行
Interval => add_months(trunc(sysdate,'yyyy'),12) + 1/24
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…
trunc(sysdate,'hh')+(60+15)/(24*60)