<返回更多

Oracle 定时任务job实际应用

2023-05-30  今日头条  中年农码工
加入收藏

一、Oracle定时任务简介

Oracle定时任务是在oracle系统中一个非常重要的子系统,运用得当,可以大大提高我们系统运行和维护能力。oracle定时任务的功能,可以在指定的时间点自行执行任务。

那么在实际工作中,什么样的场景会用到定时任务呢?下面是在实际工作中用到的真实业务场景举例

二、dbms_job涉及到的知识点

variable jobno number;
dbms_job.submit(:jobno,       —-job号 
'your_procedure;',            —-执行的存储过程, ';'不能省略 
next_date,                    —-下次执行时间 
'interval'                    —-每次间隔时间,
interval                      以天为单位);

上面是通过脚本创建,当然也可以通过plsql图形化工具来创建,具体创建过程如下

 


 

**系统会自动分配一个任务号jobno ** ,根据jobno 可以进行如下定时任务操作

三、初始化相关参数job_queue_processes

show parameter job_queue_process;
或者
select * from v$parameter where name='job_queue_processes';
alter system set job_queue_processes = 10;

四、实际创建一个定时任务(一分钟执行一次),实现定时一分钟往表中插入数据

4.1 创建需要定时插入数据的目标表

create table t_test (id varchar2(30),
                  name varchar2(30)
                 );

4.2 创建定时执行的存储过程

create or replace procedure proce_t is
begin
  insert into t_test
    (id, name)
  values
    ('1', to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'));
  commit;
end proce_t;
/

4.3 创建定时一分钟定时任务job

variable jobno number;
begin 
dbms_job.submit(:jobno,
'proce_t;',
 sysdate, 
 'sysdate+1/24/60'); 
 commit;
end;

4.5 可以根据以下语句查询刚创建好的job

select job, next_date, next_sec, fAIlures, broken from user_jobs where job = '1424'

查询结果如下

SQL> select job, next_date, next_sec, failures, broken from user_jobs where job = '1424'
  2  /
 
       JOB NEXT_DATE   NEXT_SEC           FAILURES BROKEN
---------- ----------- ---------------- ---------- ------
      1424 2020-12-30  13:07:14                  0 N

其中broken = N 表示该job已经生效

我们再来查看目标表中有没有定时插入数据

SQL> select * from t_test;
 
ID                             NAME
------------------------------ ------------------------------
1                              2020-12-30 13:05:14
1                              2020-12-30 13:03:14
1                              2020-12-30 13:04:14
1                              2020-12-30 13:08:14
1                              2020-12-30 13:06:14
1                              2020-12-30 13:07:14
 
6 rows selected

可以看到,定时一分钟插入了一条数据。

4.6 如果我们不需要这个定时任务了,那要怎么停止呢?

1、根据jobno,执行以下脚本可以停止job

SQL> begin
  2    dbms_job.broken(1424, true, sysdate);
  3    commit;
  4  end;
  5  /
 
PL/SQL procedure successfully completed

再来查看定时任务是否停用成功

SQL> select job, next_date, next_sec, failures, broken from user_jobs where job = '1424';
 
       JOB NEXT_DATE   NEXT_SEC           FAILURES BROKEN
---------- ----------- ---------------- ---------- ------
      1424 4000-01-01  00:00:00                  0 Y

我们发现BROKEN=Y 说明定时任务已经停止成功了

4.7 启用刚才停用的定时任务

SQL> begin
  2   dbms_job.run(1424);
  3   commit;
  4  end;
  5  /
 
PL/SQL procedure successfully completed

SQL> select job, next_date, next_sec, failures, broken from user_jobs where job = '1424';
 
       JOB NEXT_DATE   NEXT_SEC           FAILURES BROKEN
---------- ----------- ---------------- ---------- ------
      1424 2020-12-30  13:20:53                  0 N

BROKEN = N ,刚才的定时任务又启动了

五、定时任务中job运行时间

下面总计了一些定时任务中常用的运行时间

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>