Oracle 定时任务详解(dbms

您所在的位置:网站首页 数据库设置定时任务 Oracle 定时任务详解(dbms

Oracle 定时任务详解(dbms

2024-07-13 09:11| 来源: 网络整理| 查看: 265

文章目录 1 概述2 dbms_job2.1 提交2.2 暂停2.3 修改2.4 运行2.5 删除

1 概述 1. 数据来源包:dbms_job,Oracle 10g 前常用 2. 目前已被 dbms_scheduler 所取代,且 Oracle 建议使用 dbms_scheduler 扩展:Oracle 定时任务详解(dbms_scheduler)

在这里插入图片描述

2 dbms_job 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 : 时间间隔(周期),格式同平常咱写 日期一样,如:-- 不区分大小写 每 30 秒运行一次 'SYSDATE + 30/(24*60*60)' 每天午夜 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; 2.1 提交 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;

查询结果: 在这里插入图片描述

2.2 暂停 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;

查询截图: 在这里插入图片描述

2.3 修改 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;

查询截图: 在这里插入图片描述

2.4 运行 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;

查询截图: 在这里插入图片描述

在这里插入图片描述

2.5 删除 declare begin dbms_job.remove(job => 28); commit; end;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3