ORACLE定时任务
ORACLE定时任务
一、基础知识点
1、创建job
variable jobno number; dbms_job.submit(:jobno, --job号 'your_procedure;', --执行的存储过程 next_date, --下次执行时间 'interval' --每次间隔时间,以天为单位 );
系统会自动分配一个任务号jobno
2、删除job
dbms_job.remove(jobno)
3、修改要执行的操作:
job:dbms_job.what(jobno,what)
4、修改下次执行时间
dbms_job.next_data(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_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;
三、user_jobs表结构
| 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 | 下一次定时运行任务的时间 |
四、实用案例分析
1、建表
create table t(
id varchar2(30),
name varchar2(30)
)
2、创建存储过程
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;
/
3、创建job任务(1min一次)
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
4、跟踪任务的情况(查看任务队列)
select job,next_date,next_sec,failures,broken from user_jobs;
5、停止定时任务
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,表示定时任务已经停止
6、启动定时任务
- 查看停止的定时任务
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,表示定时任务已经停止
7、查看进程数
show parameter job_queue_processes;
必须大于 0 ,否则执行下面的命令进行修改
alter system set job_queue_processes=10;
8、再创建一个任务(每5min执行一次)
variable jobno number;
begin
dbms_job.submit(:jobno, --job号
'proce_t;', --执行的存储过程
sysdate, --下次执行时间
'sysdate + 1/24/12' --每次间隔时间,以天为单位
);
commit;
end;
/
9、执行
select job,next_date,next_sec,failures,broken from user_jobs;
10、总结
(1) 关于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、每半年定时执行
例如:每年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
(2)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…
trunc(sysdate,'hh')+(60+15)/(24*60)
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/a3e07464fc.html
