一、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
begininsert 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:146 rows selected

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

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

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

SQL> begin2    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> begin2   dbms_job.run(1424);3   commit;4  end;5  /PL/SQL procedure successfully completedSQL> 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)

Oralce定时任务实际应用相关推荐

  1. 如何从800万数据中快速捞出自己想要的数据?

    一.需求调研 正如题目所说,我们使用的是Oracle数据库,数据量在800万左右.我们要完成的事情就是在着800万数据中,通过某些字段进行模糊查询,得到我们所需要的结果集. 这是表里的数据,一共732 ...

  2. oracle sys.dbms job,Oracle定时任务之Job和Dbms_job

    感谢老哥,解决了我的疑惑 https://www.cnblogs.com/yscit/p/10376005.html https://www.cnblogs.com/ybhcolin/archive/ ...

  3. Go 学习笔记(77)— Go 第三方库之 cronexpr(解析 crontab 表达式,定时任务)

    cronexpr 支持的比 Linux 自身的 crontab 更详细,可以精确到秒级别. ​ 1. 实现方式 cronexpr 表达式从前到后的顺序如下所示: 字段类型 是否为必须字段 允许的值 允 ...

  4. SpringBoot中实现quartz定时任务

    Quartz整合到SpringBoot(持久化到数据库) 背景 最近完成了一个小的后台管理系统的权限部分,想着要扩充点东西,并且刚好就完成了一个自动疫情填报系统,但是使用的定时任务是静态的,非常不利于 ...

  5. 详解PHP实现定时任务的五种方法

    定时运行任务对于一个网站来说,是一个比较重要的任务,比如定时发布文档,定时清理垃圾信息等,现在的网站大多数都是采用PHP动态语言开发的,而对于PHP的实现决定了它没有Java和.Net这种AppSer ...

  6. 如何创建systemd定时任务

    1. 如何创建一个定时任务,通过systemd系统 1. 如何创建一个定时任务,通过systemd系统 1.1. systemd中的timer 1.2. 自定义定时任务 1.2.1. 具体步骤 1.2 ...

  7. Oracle Job定时任务的使用详解

    转自:http://www.cnblogs.com/Chestnuts/p/7068456.html Oracle中的job能为你做的就是在你规定的时间格式里执行存储过程,定时执行一个任务 . 下面是 ...

  8. spring定时每天早上八点_Spring Boot教程(13) – 简单定时任务

    "每隔几分钟执行一个任务"这种需求,几乎在每个项目里都有可能遇到.Spring框架提供了一种简单的方式来完成这一需求.你只需要在定时执行的方法上加上注解就行了. 首先你需要开启这一 ...

  9. python做定时任务的方式及优缺点_python BlockingScheduler定时任务及其他方式的实现...

    本文介绍了python BlockingScheduler定时任务及其他方式的实现,具体如下: #BlockingScheduler定时任务 from apscheduler.schedulers.b ...

最新文章

  1. 范登读书解读《亲密关系》(婚姻、爱情) 笔记
  2. 用正则表达式替换示例
  3. codeforces708C
  4. 【计算理论】计算理论总结 ( 图灵机设计示例 ) ★★
  5. Python 操作 MySQL 的正确姿势
  6. 14 | 排序优化:如何实现一个通用的、高性能的排序函数?
  7. linux进行MySQL查询_linux下mysql Select查询命令
  8. [转] left join/right join/inner join操作演示
  9. redis 用户订单缓存_Redis实战(12)-基于Key失效和定时任务实现订单支付超时自动失效...
  10. python创建图形界面_Python入门四:创建第一个图形界面-Go语言中文社区
  11. 2022年6月25日PMP考试通关宝典-3
  12. 芒果db怎么连mysql_MongoDB 芒果数据库的使用
  13. 高通平台环境搭建,编译,系统引导流程分析
  14. 如何从零开始学习Java语言
  15. Email Header 是什么
  16. wechat微信小程序 :对应的服务器证书无效
  17. Ubuntu20.04使用清华源下载Qt
  18. css怎么设置图片卷角效果,用css3制作纸张效果(外翻卷角)
  19. 解读微软互联网新战略(下)
  20. 好用的小说小偷程序php,ptcms小说小偷程序最新漏洞

热门文章

  1. 【OpenGL】顶点变换常用函数总结
  2. 1107班html大赛比赛说明 同学们需注意的事项
  3. 演练表创建 用户表my_user 追加了列 mysql 20210413_122410
  4. 2021.03.14.浩楠卷子
  5. 案例 员工演奏乐器 c# 1614191419
  6. 使用记事本完成第一个java程序
  7. 七牛云与python交互的教程
  8. TDengine安装
  9. Android的图片叠加
  10. 【spring-cloud】Eureka server和client之间的心跳通信