当前位置:   article > 正文

Oracle 定时任务详解(dbms_job)_oracle dbms_job

oracle dbms_job

1 概述

1. 数据来源包:dbms_job,Oracle 10g 前常用

2. 目前已被 dbms_scheduler 所取代,且 Oracle 建议使用 dbms_scheduler
  • 1
  • 2
  • 3

在这里插入图片描述

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 : 时间间隔(周期),格式同平常咱写 日期一样,如:-- 不区分大小写
       <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) 每天早上830,
	       -- 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) 每周六和周日早上610from dual;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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 一般不指定
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

示例:每三分钟调用一次过程 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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

2.2 暂停

procedure broken(job       in binary_integer,
                 broken    in boolean,
                 next_date in date default sysdate);
  • 1
  • 2
  • 3

示例:暂停上述定时任务

declare
begin
  dbms_job.broken(job => 28, broken => true);

  commit;
end;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

示例:修改上述定时任务的时间间隔为:每 5 分钟执行一次

declare
begin
  dbms_job.interval(job => 28, interval => 'sysdate + 5/1440');
  
  -- 记得提交
  commit;
end;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

2.4 运行

procedure run(job   in binary_integer,
              force in boolean default false);
  • 1
  • 2

示例:运行上述已暂停的定时任务

declare
begin
  dbms_job.run(job => 28);

  commit;
end;

-- 等同于
-- declare
-- begin
--   dbms_job.broken(job => 28, broken => false, next_date => sysdate);
-- commit;
-- end;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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

在这里插入图片描述

2.5 删除

declare
begin
  dbms_job.remove(job => 28);

  commit;
end;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/203561
推荐阅读
相关标签
  

闽ICP备14008679号