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值

二、初始化相关参数

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

  2. 查看job_queue_process参数
    show parameter job_queue_process;
    select * from v$parameter where name = ‘job_queue_process’

  3. 修改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、启动定时任务

  1. 查看停止的定时任务
select job,next_date,next_sec,failures,broken from user_jobs;

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

  1. 启动定时任务
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)

你可能感兴趣的:(ORACLE,oracle,数学建模,数据库)