Oracle 定时任务job实际应用
一、Oracle定时任务简介
Oracle定时任务是在oracle系统中一个非常重要的子系统,运用得当,可以大大提高我们系统运行和维护能力。oracle定时任务的功能,可以在指定的时间点自行执行任务。
那么在实际工作中,什么样的场景会用到定时任务呢?下面是在实际工作中用到的真实业务场景举例
- 在生成环境中,有时候需要在表中记录一些业务日志,系统运行时间长了之后,表中日志会越来越多,导致系统性能下降,这时候就需要用到定时任务,定时去删除表中一些时间年代比较久远垃圾数据。
- 在某些业务场景中,明细表的数据量特别大,而需要查询明细表一下汇总数据,就需要将明细表中的数据【某天的业务产生的金额、人数等】通过计算汇总到另外表中,这样在查询的时候就能优化查询效率。而以上操作需要在业务量比较少的情况下进行【一般都在凌晨之后】,这是就需要用到定时任务。
二、dbms_job涉及到的知识点
- 创建job脚本
variable jobno number;
dbms_job.submit(:jobno, —-job号
'your_procedure;', —-执行的存储过程, ';'不能省略
next_date, —-下次执行时间
'interval' —-每次间隔时间,
interval 以天为单位);
上面是通过脚本创建,当然也可以通过plsql图形化工具来创建,具体创建过程如下
**系统会自动分配一个任务号jobno ** ,根据jobno 可以进行如下定时任务操作
删除job: dbms_job.remove(jobno);
修改要执行的操作: job:dbms_job.what(jobno, what);
修改下次执行时间:dbms_job.next_date(jobno, next_date);
修改间隔时间:dbms_job.interval(jobno, interval);
启动job: dbms_job.run(jobno);
停止job: dbms.broken(jobno, broken, nextdate); –broken为boolean值
三、初始化相关参数job_queue_processes
- job_queue_process表示oracle能够并发的job的数量,当job_queue_process值为0时表示全部停止oracle的job
- 查看job_queue_processes参数
show parameter job_queue_process;
或者
select * from v$parameter where name='job_queue_processes';
- 修改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运行时间
下面总计了一些定时任务中常用的运行时间
每分钟执行: TRUNC(sysdate,'mi') + 1/(24*60)
半个小时: sysdate+30/(24*60)
每天凌晨1点执行:TRUNC(sysdate) + 1 +1/(24)
每周一凌晨1点执行: TRUNC(next_day(sysdate,'星期一'))+1/24
每月1日凌晨1点执行: TRUNC(LAST_DAY(SYSDATE))+1+1/24
每季度的第一天凌晨1点执行: TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
每年7月1日和1月1日凌晨1点: ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
每年1月1日凌晨1点执行: ADD_MONTHS(trunc(sysdate,'yyyy'), 12)+1/24
每个小时的第15分钟运行,比如:8:15,9:15,10:15…:trunc(sysdate,'hh')+(60+15)/(24*60)
Oracle 定时任务job实际应用的更多相关文章
- 最简单的一个Oracle定时任务
最简单的一个Oracle定时任务一.在PLSQL中创建表:create table HWQY.TEST(CARNO VARCHAR2(30),CARINFOID NUMBER) 二.在PLSQ ...
- oracle定时任务
一.简介 当我们需要oracle数据库定时自动执行一些脚本,或进行数据库备份.数据库的性能优化,包括重建索引等工作是需要使用到定时任务. 定时任务可以使用以下两种完成. 1.操作系统级的定时任务,wi ...
- Oracle定时任务Job笔记
定时任务应用场景: 某一个生产系统上面,临时表不断变多,占了不少磁盘空间.由于这套软件是直接买的,不方便修改源代码.所以考虑使用Oracle定时任务直接从数据库层删除临时表. 定时任务业务: 首先写好 ...
- 【Oracle】使用dbms_job包创建Oracle定时任务
在Oracle的包里面,有一个名字叫做DBMS_JOB的包,它的作用是安排和管理作业队列.通过作业队列,可以让Oracle数据库定期执行特定的任务.当使用DBMS_JOB管理作业的时候, ...
- oracle 定时任务例子【项目例子】
说明:请在plsql工具的命令窗口中,依次按步骤执行如下脚本 (1)建立备份表 my_test_log2create table my_test_log2 as select * from my_ ...
- 利用Oracle定时任务重置序列
业务需求是:二元化编号规则:RYH+年月+001(开始),按月计算,每月1号重置为001 数据库中已有序列和函数如下: 解决方法:采用Oracle定时任务,每月1号重置该序列从1开始增长,SQL如下: ...
- Oracle学习(十)Oracle定时任务
一.Oracle定时任务基础 简介 oracle job 是应用在数据库层面,用来定时执行存储过程或者 SQL 语句的定时器. 查询 --当前库中运行的 job SELECT t.* FROM dba ...
- oracle系统包——dbms job用法(oracle定时任务)
用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...
- oracle定时任务(dbms_job)
author:skate time:2007-09-12 http://publish.it168.com/2006/0311/20060311017002.shtml 今天总结下Oracle的任务队 ...
- oracle系统包——dbms_job用法(oracle定时任务)
用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...
随机推荐
- 嵌入式linux系统新人学习回顾
(1).开发环境搭建 1.虚拟机ubuntu 2.远程登录/远程传输/串口三合一软件MobaXterm 3.FTP传输工具FileZilla 4.TFTP服务器软件tftpd.exe (2)开发板硬件 ...
- 修改linux服务器时间
date -s "20220104 11:07:05" &&hwclock --systohc
- 【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
logo 避坑宝 v1.0.0 基于SpringBoot+uniapp企业黑红名单吐槽小程序 项目介绍 避坑宝 [避坑宝]企业黑红名单吐槽小程序是一个具有吐槽发布企业信息的一个平台,言论自由,评判自定 ...
- 搭建良好编写体验的webgl编程环境 vscode+vit
因为webgl代码是以字符串的形式嵌入在javascript代码中,这对于我们编写webgl代码的体验不友好,本文介绍如何搭建友好webgl编程环境: 需要安装的vscode插件 WebGL GLSL ...
- 20个值得收藏的实用JavaScript技巧
1.确定对象的数据类型 function myType(type) { return Object.prototype.toString.call(type).slice(8, -1); 使用Obje ...
- 全网最详细中英文ChatGPT-GPT-4示例文档-信息智能提取从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)
目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...
- vue中实现video的动态src绑定
Vue中实现video的动态src 试了网上的$refs方法发现并没有用 解决方案: 通过require方法 <div> <video :src='url' @click= ...
- Let's Encrypt 泛域名证书申请
泛域名 泛域名证书又名通配符证书是SSL证书中的其中一种形式,一般会以通配符的形式(如:*.domain.com)来指定证书所要保护的域名. OV证书和DV证书都会有通配符的域名形式提供,而EV证书一 ...
- python入门教程之三编码问题
1编码问题 Python文件中如果未指定编码,在执行过程中会出现报错: !/usr/bin/python print ("你好,世界") 以上程序执行输出结果为: 文件" ...
- @property、关联关系、继承、多继承
1.@property使用来修饰属性的,将属性私有化改为公有化,但是可以设置属性条件 格式: class Person: def __init__(self,name,age): self.name ...