Oracle定时任务的创建与禁用/删除

在开始操作之前,先从三W开始,即我常说的what 是什么;why 为什么使用;how 如何使用。

一、Oracle定时器是什么

Oracle定时器是一种用于在特定时间执行任务或存储过程的工具,可以根据需求设置不同的时间段和频率来执行相应的操作。

二、为什么使用Oracle定时器

使用Oracle定时器的好处在于可以自动化执行重复性的任务,比如每天、每周或每月执行一次数据库维护、数据备份等操作,从而减轻了人工操作的负担,提高了工作效率。

三、如何使用Oracle定时器

使用Oracle定时器的方法包括编写存储过程来定义需要执行的任务,然后创建一个定时器Job来调度这个存储过程。可以根据具体需求设置定时器的执行时间、频率和其他参数,以实现自动化执行任务的目的。

四、目前有哪些主流Oracle定时器?有何区别?

目前主流的Oracle定时器有两种:DBMS_SCHEDULER和DBMS_JOB。它们之间有以下区别:
1. DBMS_SCHEDULER:DBMS_SCHEDULER是Oracle 10g及以上版本引入的定时器。它提供了更强大和灵活的功能,可以创建和管理复杂的作业调度。DBMS_SCHEDULER使用了面向对象的方式来定义作业和调度器,并且支持多种类型的作业,如PL/SQL块、存储过程、外部脚本等。它还支持更多的调度选项,如基于时间、日期、事件等触发器,以及更灵活的重复调度设置。

2. DBMS_JOB:DBMS_JOB是Oracle 9i及以下版本中使用的定时器。它相对简单,只能调度PL/SQL块作业。DBMS_JOB使用了过程式的方式来定义作业和调度器,调度选项相对较少,只能基于时间间隔来触发作业。此外,DBMS_JOB的调度信息存储在数据库中的JOB表中。

总的来说,DBMS_SCHEDULER比DBMS_JOB更强大和灵活,适用于复杂的作业调度需求。而DBMS_JOB则更简单,适用于简单的定时任务。

介绍了概念,接下来是实际使用,参考自蒋老师的文章,感谢蒋老师的分享和归纳——

oracle 定时任务 (yuque.com)icon-default.png?t=N7T8https://www.yuque.com/ernanbei/fh8sgs/fn20rxtaosmfdfnq?singleDoc#最常见的定时场景就是周期性统计动态变化的数据,以我为例,我需要在项目中加入一个Oracel定时器,每三分钟统计一次数据,那首先得写一个函数用于操作数据的读取和存储,其次是设置定时器,通过定时器定时周期性调度执行该函数,从而实现数据的周期性的获取。

1、函数的编写

create PROCEDURE SYNCHRONIZE_HONORING_HISTORY
ASV_ERR_MSG NVARCHAR2(1000);V_COUNT_1 NUMBER(1);V_COUNT_2 NUMBER(5) :=0;--查询当天的数据cursor c_job is select APPLY_RECORD_ID,COMMENDATION_ID,COMMENDATION_NAME,USER_NAMES,UPDATE_DATE,COMMENDATION_SOURCE,COMMENDATION_SOURCE_NAME,COMPETENCE_DIMENSION,COMPETENCE_DIMENSION_NAME,SUM_SCORE,BASE_DEPT_IDfrom (select APPLY_RECORD_ID,COMMENDATION_ID,COMMENDATION_NAME,substr(USER_NAME, 0, instr(USER_NAME, ',', -1) - 1) USER_NAMES,UPDATE_DATE,COMMENDATION_SOURCE,COMMENDATION_SOURCE_NAME,COMPETENCE_DIMENSION,COMPETENCE_DIMENSION_NAME,SUM_SCORE,BASE_DEPT_IDfrom (select A.APPLY_RECORD_ID,A.COMMENDATION_ID,C.COMMENDATION_NAME,xmlagg(xmlelement(e, d.name, ',').extract('//text()')).getclobval() USER_NAME,A.UPDATE_DATE,C.COMMENDATION_SOURCE,E.DICT_VALUE                                                        COMMENDATION_SOURCE_NAME,c.COMPETENCE_DIMENSION,F.DICT_VALUE                                                        COMPETENCE_DIMENSION_NAME,sum(B.SCORE)                                                        SUM_SCORE,A.BASE_DEPT_IDfrom (select APPLY_RECORD_ID,COMMENDATION_ID,UPDATE_DATE,BASE_DEPT_IDfrom DIAN_COMMENDATION_APPLY_RECORD Awhere APPLY_STATUS = 'APPROVED'and UPDATE_DATE >= trunc(sysdate)and UPDATE_DATE <= trunc(sysdate+ 1)) Aleft join (select SOURCE_ID, USER_ID, SCORE,USER_ACCOUNT_IDfrom DIAN_COMMENDATION_DISTRIBUTE_RECORD DRwhere DR.CREATION_DATE >= trunc(sysdate)and DR.CREATION_DATE <=  trunc(sysdate+ 1)) Bon a.APPLY_RECORD_ID = B.SOURCE_IDleft join DIAN_COMMENDATION Con A.COMMENDATION_ID = c.COMMENDATION_IDleft join (select A.USER_ID,A.NAME,B.USER_ACCOUNT_IDfrom DIAN_USER_EXPAND Aleft join DIAN_USER_ACCOUNT bon a.USER_ID=b.USER_ID) Don B.USER_ID = D.USER_IDand B.USER_ACCOUNT_ID = D.USER_ACCOUNT_IDleft join (select DICT_VALUE, DICT_KEYfrom DIAN_DICTIONARY_MAPwhere DICT_TYPE = 'COMMENDATION_SOURCE'and IS_ENABLE = 1) Eon E.DICT_KEY = c.COMMENDATION_SOURCEleft join (select DICT_VALUE, DICT_KEYfrom DIAN_DICTIONARY_MAPwhere DICT_TYPE = 'COMPETENCE_DIMENSION'and IS_ENABLE = 1) Fon F.DICT_KEY = c.COMPETENCE_DIMENSIONgroup by A.APPLY_RECORD_ID,A.COMMENDATION_ID,C.COMMENDATION_NAME,A.UPDATE_DATE,C.COMMENDATION_SOURCE,E.DICT_VALUE,c.COMPETENCE_DIMENSION,F.DICT_VALUE,A.BASE_DEPT_ID));/*** create by: lcb* create date:2023-10-30* modify by:wxx* modify date:2023-12-8 加入基地ID BASE_DEPT_ID* describe:同步当天表彰历史数据 (每3分钟同步一次)*/
BEGIN--循环FOR ITEM IN C_JOBLOOP--  判断数据是否存在SELECT COUNT(1) INTO V_COUNT_1 FROM DIAN_HONORING_HISTORY WHERE APPLY_RECORD_ID = ITEM.APPLY_RECORD_ID;IF V_COUNT_1 = 0 THEN-- 不存在则添加数据INSERT INTO DIAN_HONORING_HISTORY(APPLY_RECORD_ID,COMMENDATION_ID,COMMENDATION_NAME,USER_NAMES,UPDATE_DATE,COMMENDATION_SOURCE,COMMENDATION_SOURCE_NAME,COMPETENCE_DIMENSION,COMPETENCE_DIMENSION_NAME,SUM_SCORE,BASE_DEPT_ID)VALUES (ITEM.APPLY_RECORD_ID,ITEM.COMMENDATION_ID,ITEM.COMMENDATION_NAME,ITEM.USER_NAMES,ITEM.UPDATE_DATE,ITEM.COMMENDATION_SOURCE,ITEM.COMMENDATION_SOURCE_NAME,ITEM.COMPETENCE_DIMENSION,ITEM.COMPETENCE_DIMENSION_NAME,ITEM.SUM_SCORE,ITEM.BASE_DEPT_ID);IF V_COUNT_2 < 100 THENV_COUNT_2 := V_COUNT_2 + 1;ELSEV_COUNT_2 := 0;COMMIT;END IF;END IF;END LOOP;COMMIT;
EXCEPTIONWHEN OTHERS THENROLLBACK;V_ERR_MSG := SQLERRM || CHR(13) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;JA_WRITE_LOG(JA_UTILS_PKG.GET_FN_NAME(), 'ERROR', V_ERR_MSG, -1, 1);
END;
/

2、设置Oralcle定时器

-- 表彰历史
BEGIN
DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => 'SYNCHRONIZE_HONORING_HISTORY2',JOB_TYPE => 'PLSQL_BLOCK',JOB_ACTION => 'SYNCHRONIZE_HONORING_HISTORY;',START_DATE => to_date('18-10-2022 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),--开始时间ENABLED => TRUE, --创建完成后激活REPEAT_INTERVAL => 'TRUNC(SYSDATE,''MI'')+3/(24*60)',  --每3分钟执行一次
--       REPEAT_INTERVAL => 'TRUNC(SYSDATE + 1) + (8*60 + 30)/(24*60)', --每天8:30执行COMMENTS => '每三分钟统计表彰历史');
END;

注意:

如果是第一次使用定时器,需要手动将先前数据同步,如果数据量少可以从开始时间直接同步至当前时间对应数据,但是数据量较大则不建议这么做,会加剧数据库查询和存储的的负担,因此可能需要分时间对其切片,设置开始时间和结束时间并且跨度不宜过大,一点点同步到当前时间,后面就由定时器自动同步就好。

3.定时器的禁用与删除

也会遇到不再使用该定时器的情况,这时候提供了两种操作——禁用或删除。

操作步骤如下:

先查询数据库中的定时任务,查到相关信息如任务名,通过对查询到的任务名执行禁用/删除。

查看当前用户的定时任务指令

--查看当前用户的定时任务
select * from USER_SCHEDULER_JOBS;
-- 测试环境定时任务名
-- SYNCHRONIZE_HONORING_HISTORY_TASK   表彰历史同步
-- SYNCHRONIZE_JINGDIAN_STATISTICS_TASK  表彰项

禁用指令

--禁用
DBMS_SCHEDULER.DISABLE('TEST_JOB');  --暂时停止某个SCHEDULER JOB
--禁用定时任务
begin
DBMS_SCHEDULER.DISABLE('SYNCHRONIZE_HONORING_HISTORY_TASK');
DBMS_SCHEDULER.DISABLE('SYNCHRONIZE_JINGDIAN_STATISTICS_TASK');
end;

删除指令

--删除
DBMS_SCHEDULER.DROP_JOB(JOB_NAME => 'TEST_USER_INSERT',FORCE => TRUE);
-- 删除定时任务
begin
DBMS_SCHEDULER.DROP_JOB(JOB_NAME => 'SYNCHRONIZE_HONORING_HISTORY_TASK',FORCE => TRUE);
DBMS_SCHEDULER.DROP_JOB(JOB_NAME => 'SYNCHRONIZE_JINGDIAN_STATISTICS_TASK',FORCE => TRUE);
end;

这里我用的是禁用,状态可以在查询中查看,再次执行代码

--查看当前用户的定时任务
select * from USER_SCHEDULER_JOBS;

可以看到使用情况变成了False,状态变成了Disabled,应用成功啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS后台代理提醒

后台代理提醒 简介 随着生活节奏的加快&#xff0c;我们有时会忘记一些重要的事情或日子&#xff0c;所以提醒功能必不可少。应用可能需要在指定的时刻&#xff0c;向用户发送一些业务提醒通知。例如购物类应用&#xff0c;希望在指定时间点提醒用户有优惠活动。为满足此类业…

本地运行vue脚手架 从下载node开始到创建vue

vue2node 1.安装node vue2版本我node一般使用的是14版本左右 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f886442c20114e62aef8113425e34ad2.pngnode官网 假如我node版本过低 你就找到控制面板 找到node卸载掉 我一般下载两个版本 安装vue cli vuecl…

BurpSuite抓不到本地包

目录 前言 一、方法一 二、方法二 三、方法三 四、方法四 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f…

基础数据结构(1):链表

在学习算法时&#xff0c;发现用什么数据结构来存储数据是很重要的&#xff0c;所以学习数据结构也是必须的&#xff0c;先从基础数据结构&#xff1a;数组&#xff0c;字符串&#xff0c;链表&#xff0c;栈&#xff0c;队列&#xff0c;树&#xff0c;矩阵&#xff0c;邻接表…

利用虚继承解决菱形继承(钻石继承)的问题 学习笔记

菱形继承概念&#xff1a; 两个派生类继承同一个基类 又有某个类同时继承两个派生类 这种继承又被称为菱形继承&#xff0c;或者钻石继承 定义一个基类Animal&#xff0c;两个派生类Sheep、Camal&#xff0c;SheepCame继承于两个派生类 class Animal { public:int m_Age; }…

Bert-vits2-v2.2新版本本地训练推理整合包(原神八重神子英文模型miko)

近日&#xff0c;Bert-vits2-v2.2如约更新&#xff0c;该新版本v2.2主要把Emotion 模型换用CLAP多模态模型&#xff0c;推理支持输入text prompt提示词和audio prompt提示语音来进行引导风格化合成&#xff0c;让推理音色更具情感特色&#xff0c;并且推出了新的预处理webuI&am…

SpringMVC---详细介绍+使用

文章目录 什么是SpringMVC&#xff1f;使用SpringMVCSpringMVC创建和连接创建连接RequestMapping的基础使用 获取参数返回数据返回静态页面返回非页面的普通数据&#xff08;text/html&#xff09;返回JSON对象请求转发或者请求重定向 什么是SpringMVC&#xff1f; SpringMVC它…

【Spring】14 ApplicationEventPublisherAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动3.5 工作流程图 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点&#xff0c;其中之一是 Bean 生命周期中的回调接口。本文将专注介绍一个与事件发布相关的接口 Applicatio…

【SQLite】SQLite数据库简单使用与Navicat安装-加密

Sqlite为免安装数据库&#xff0c;安装步骤总结&#xff1a; 官网下载Sqlit数据库&#xff0c;官网下载地址:https://www.sqlite.org/download.html 下载: sqlite-dll-win64-x64-3390400.zip或者32位sqlite-dll-win32 sqlite-tools-win-x64-3440200.zip或者32位sqlite-tools-wi…

Opencv入门五 (显示图片灰度值)

源码如下&#xff1a; #include <opencv2/opencv.hpp> int main(int argc, char** argv) { cv::Mat img_rgb, img_gry, img_cny; cv::namedWindow("Example Gray",cv::WINDOW_AUTOSIZE); cv::namedWindow("Example Canny", cv::WINDOW_…

若依vue前端 报错error:0308010C:digital envelope routines::unsupported一步到胃的解决方法

第一步: 直接打开package.json 第二步: 直接替换scripts的内容为下面的内容 "scripts": {"dev": "SET NODE_OPTIONS--openssl-legacy-provider && vue-cli-service serve","build:prod": "SET NODE_OPTIONS--openssl-leg…

无源晶振电路中两端电阻和电容的作用

无源晶振电路中两端电阻和电容的作用是什么&#xff0c;今天晶发电子就详细讲讲&#xff0c;具体如下&#xff1a; 一、并联电阻的作用 配合IC内部电路组成负反馈、移相&#xff0c;使放大器工作在线性区。 并联降低谐振阻抗&#xff0c;使无源晶振易启动。 并联电阻取值大小…

【vCenter Converter】VMware vCenter Converter Standalone 理论, 下载与安装要求

目录 1. vCenter Converter 概述1.1 作用与特征&#xff08;1&#xff09;性能和可靠性&#xff08;2&#xff09;互操作性&#xff08;3&#xff09;管理 2. 下载 vCenter Converter Standalone3. 安装 vCenter Converter Standalone3.1 系统要求&#xff08;1&#xff09;支持…

文件消失但是有占用内存的恢复方法

文件消失但占用内存是一个常见的问题&#xff0c;通常是由于文件系统错误或病毒攻击引起的。在这种情况下&#xff0c;文件虽然从目录结构中消失&#xff0c;但它们仍然占用存储空间。本文将分析这一问题的原因&#xff0c;并探讨解决该问题的几种方法。 文件消失但占用内存的原…

android11-开机自启脚本

1. 编写myshell脚本 diff --git a/device/rockchip/rk356x/ok3568_r/myshell.sh b/device/rockchip/rk356x/ok3568_r/myshell.sh new file mode 100644 index 0000000000..c78b6d93bd --- /dev/nullb/device/rockchip/rk356x/ok3568_r/myshell.sh-0,0 1,4 #!/vendor/bin/shec…

抢先看!Salesforce Spring ‘24中的10个亮点功能!

Spring 24来临在即&#xff0c;Preview Orgs已上线。在Spring 24中&#xff0c;将会为管理员、开发人员和顾问带来更多新功能。在这片云计算的海洋里&#xff0c;一些亮点功能总能在Salesforce生态系统中引起强烈反响。本篇文章为学习者们盘点了Spring 24中的10个亮点功能&…

Vue项目搭建过程

Vue项目搭建过程 1、安装NodeJs 1.1 下载安装包 在 http://nodejs.cn/download/ 上下载64位安装包&#xff0c;然后进行安装&#xff0c;和普通软件的安装一样。 C:\Users\Administrator>node -v v16.13.1C:\Users\Administrator>npm -v 8.5.51.2 安装cnpm # 安装cn…

C语言,数组循环哪家好,指针or下标?

日常工作中&#xff0c;我们经常会用到循环遍历数组元素。不考虑只能使用某一特定方式的情况下&#xff0c;有人喜欢用数组下标遍历&#xff0c;有人则喜欢用指针遍历。那么这两者是否有性能差异呢&#xff1f; 我们先来看两个例子&#xff1a; 代码一 /* a.c */ #include &…

【QML】QML复制文件或文件夹,显示进度,多线程复制

1. 效果 可以显示复制文件和文件夹的进度 复制文件&#xff1a; bool copyFileFunc(QString _from, QString _to);复制文件夹&#xff1a;bool copyDirectoryFiles(const QString &_from, const QString &_to);举例&#xff1a; //复制文件copyhelper.copyFileToDir(&…

推荐12款好用的在线平面设计工具,让设计更简单

平面设计是图形表达和信息展示的重要手段&#xff0c;在游戏场景和角色造型、插画、广告制作等艺术设计领域有着重要的应用&#xff0c;如海报设计、包装设计等。 平面设计强调视觉传达&#xff0c;一般以图像、图形和文字等视觉元素为主要手段&#xff0c;通过排版、配色、构…