赞
踩
1. 数据来源包:dbms_job,Oracle 10g 前常用
2. 目前已被 dbms_scheduler 所取代,且 Oracle 建议使用 dbms_scheduler
1. 查看数据库中定时任务的最多并发数(默认:1000) (1) show parameter job_queue_processes -- 超过了,就得排队 2. 设置数据库中定时任务的最多并发数(比如:10) (1) alter system set job_queue_processes = 10 3. 主要视图 (1) select * from dba_jobs t; -- 所有 job 信息 (2) select * from dba_jobs_running t; -- 执行中的 job 信息 4. 主要参数 (1) job : job 序列号(来自 sys.jobseq) (2) what : 具体要做的事情,常为要调用的 '存储过程名' (3) next_date: 下次运行时间 (4) interval : 时间间隔(周期),格式同平常咱写 日期一样,如:-- 不区分大小写 <1> 每 30 秒运行一次 'SYSDATE + 30/(24*60*60)' <2> 每天午夜 12 点 'trunc(sysdate + 1)' 5. 日期函数 select sysdate 当前时间, sysdate + 1 每天, sysdate + 1 / 24 每小时, sysdate + 1 / (24 * 60) 每分钟, sysdate + 1 / (24 * 60 * 60) 每秒, sysdate + 7 每周, trunc(sysdate + 1) 每天午夜12点, trunc(sysdate + 1) + (8 * 60 + 30) / (24 * 60) 每天早上8点30分, -- show parameter nls_date_language; 'TUESDAY' next_day(trunc(sysdate), '星期二') + 12 / 24 每星期二中午12点, trunc(last_day(sysdate)) + 1 每个月第一天的午夜12点, trunc(add_months(sysdate + 2 / 24, 3), 'Q') - 1 / 24 每个季度最后一天的晚上11点, -- 周六 saturday,周日 sunday trunc(least(next_day(sysdate, '星期六'), next_day(sysdate, '星期日'))) + (6 * 60 + 10) / (24 * 60) 每周六和周日早上6点10分 from dual;
dbms_job 包头部分:
基础数据准备:
create table dbms_job_history ( message varchar2(100), create_date date ); create or replace procedure p_dbms_job_test as begin -- 记录 job 信息 insert into dbms_job_history (message, create_date) values ('dbms_job', sysdate); commit; end;
procedure submit(job out binary_integer,
what in varchar2,
next_date in date default sysdate,
interval in varchar2 default 'null',
no_parse in boolean default false, -- 是否需要解析与 job 相关的过程
instance in binary_integer default 0, -- 指定哪个实例可以运行 job
force in boolean default false); -- 是否强制运行与 job 相关的实例
说明:参数 no_parse、instance、force 一般不指定
示例:每三分钟调用一次过程 p_dbms_job_test:
declare
job binary_integer;
begin
dbms_job.submit(job => job,
what => 'p_dbms_job_test();',
next_date => sysdate, -- 立即执行
interval => 'sysdate + 3/1440' -- 1天 = 24*60*60 = 1440
);
-- 记得哦
commit;
end;
查询结果:
procedure broken(job in binary_integer,
broken in boolean,
next_date in date default sysdate);
示例:暂停上述定时任务
declare
begin
dbms_job.broken(job => 28, broken => true);
commit;
end;
查询截图:
procedure change(job in binary_integer,
what in varchar2,
next_date in date,
interval in varchar2,
instance in binary_integer default null,
force in boolean default false);
其它都只是 chagne 的一部分,如
(1) what
(2) next_date
(3) interval
(4) instance
示例:修改上述定时任务的时间间隔为:每 5 分钟执行一次
declare
begin
dbms_job.interval(job => 28, interval => 'sysdate + 5/1440');
-- 记得提交
commit;
end;
查询截图:
procedure run(job in binary_integer,
force in boolean default false);
示例:运行上述已暂停的定时任务
declare
begin
dbms_job.run(job => 28);
commit;
end;
-- 等同于
-- declare
-- begin
-- dbms_job.broken(job => 28, broken => false, next_date => sysdate);
-- commit;
-- end;
查询截图:
declare
begin
dbms_job.remove(job => 28);
commit;
end;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。