暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mysql、Oracle数据库如何创建定时任务?

云东升 2022-02-21
3845


Mysql、Oracle数据库如何创建定时任务?


1

一、使用navicat来创建MySql定时任务



事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。

01


1.开启定时任务


定时任务是默认关闭的,Value值为ON时就是开启状态;


查询定时任务是否开启
SHOWVARIABLES LIKE '%event_sche%';



如果event_scheduler是OFF的话开启定时任务
SET GLOBAL event_scheduler = 1;

如果需要永久开起定时任务需要在my.ini中配置event_scheduler = on

如果要关闭定时任务则执行下面语句
SET GLOBAL event_scheduler = 0;



02


通过navicat创建定时任务


在navicat找到事件新建一个事件




点击新建事件



01

定义



是填写需要运行的sql或者储存过程。

02

计划



是定时任务的运行规则,计划中有两种事件AT和EVERY,EVERY又称“事件调度器”,一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的。



这里设置的就是从2022-02-2112:00:00 开始每1天执行一次。

03

注释


创建的事件的注射

04

SQL预览


是创建事件的sql语句,如果不用navicat,可直接执行sql语句创建事件。



05

创建事件示例


01


 在创建事件myevent1小时后执行,执行一条更新


CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1HOUR
DO
UPDATE `test01`.`test` SET `name` = 'jack' WHERE`id` = 1;

02


2014年3月20日12点整清空test表:



CREATE EVENT e_test
ON SCHEDULE AT TIMESTAMP '2014-03-20 12:00:00'
DO TRUNCATE TABLE test.aaa;

03


5天后开启每天定时清空test表:



CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;

04


每天定时清空test表,5天后停止执行



CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;

05


5天后开启每天定时清空test表,一个月后停止执行:



CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
DO TRUNCATE TABLE test.aaa;

06


每天定时清空test表(只执行一次,任务完成后就终止该事件):



CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ON COMPLETION NOT PRESERVE
DO TRUNCATE TABLE test.aaa;
[ON COMPLETION [NOT]PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOTPRESERVE。

关闭、启动、移动、删除event

01


修改内容


ALTER EVENT myevent
... 具体修改内容

02


临时关闭某个event


ALTER EVENT myevent DISABLE;

03


开启某个event



ALTER EVENT myevent ENABLE;

04


删除event



DROP EVENT [IF EXISTS] event_name

05


查询event



2

使用PLSQL来创建Oracle定时任务


使用oracle最最匹配的工具是plsql,如果用plsql创建定时器呢?下面我简单介绍使用工具创建定时器的方法:




1、创建任务执行的存储过程,如名称为YxtestJob,向测试表中插入数据


create or replace procedure YxtestJob is
begin
insertinto ztest(name,createdate)
values('test',sysdate);
end;


2、定时器对应的DBMS_Jobs文件夹,右键新建(new)





3、创建任务




(1)、在what值中填写待执行的存储过程,多个可以,隔开


(2)、在间隔中填写执行时间策略;(具体写法见下述备注)



注:job的定时执行和时间间隔说明




间隔/interval是指上一次执行结束到下一次开始执行的时间间隔,当interval设置为null时,该job执行结束后,就被从队列中删除。假如我们需要该job周期性地执行,则要用‘sysdate+m’表示。


(1).每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
每小时执行
Interval => TRUNC(sysdate,'hh') + 1/ (24)


(2).每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate+ 1)  +1/ (24)


(3).每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24


(4).每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24


(5).每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24


(6).每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval =>
 ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24


(7).每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24


查看任务


如果想查看一些脚本,处理通过打开文件夹的方式,也可以使用更方便的sql语句进行查看。

SELECT FROM dba_jobs;

注意,如果next_date是4000-1-1表示这个脚本已经是停止状态。




文章转载自云东升,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论