【Oracle】创建定时任务

背景:

项目有个前端功能实现依赖于后台数据库定时触发某项任务。

测试环境准备创建此项数据库任务,以满足前端的测试。

 

参考:

https://www.cnblogs.com/linjiqin/p/3152638.html

https://www.cnblogs.com/yscit/p/10376005.html

 

Oralce中的任务有2种:Job和Dbms_job,两者的区别有:

1.  jobs是oracle数据库的对象, dbms_jobs只是jobs对象的一个实例, 就像对于tables, emp和dept都是表的实例。

2.  创建方式也有差异,Job是通过调用dbms_scheduler.create_job包创建的,Dbms_job则是通过调用dbms_job.submit包创建的。

3.  两种任务的查询视图都分为dba和普通用户的,Job对应的查询视图是dba_scheduler_jobs和user_scheduler_jobs,dbms_jobs对应的查询视图为dba_jobs和user_jobs。

 

主要介绍Dbms_job

BEGIN
DBMS_JOB.SUBMIT(
   JOB OUT BINARY_INTERGER,--输出变量,是此任务在任务队列中的编号,也可以自定义,一般不传
   WHAT IN VARCHAR2,--执行的任务的名称及其输入参数
   NEXT_DATE IN DATE DEFAULT SYSDATE,--任务执行的时间
   INTERVAL IN VARCHAR2 DEFAULT NULL,--任务执行的时间间隔
   NO_PARSE IN BOOLEAN DEFAULT FALSE,--用于指定是否需要解析与作业相关的过程
   INSTANCE IN BINARY_INTEGER DEFAULT ANY_INSTANCE,--用于指定哪个例程可以运行作业
   FORCE IN BOOLEAN DEFAULT FALSE--用于指定是否强制运行与作业相关的例程
);
END

 

练习

--1.创建表:
create table testa (cola date);

--2.创建存储过程:
create or replace procedure testp as
begin
insert into testa values(sysdate);
end;
/

--3.创建job任务(1分钟执行一次):
variable jobno number;
begin
   dbms_job.submit(:jobno,'testp;', sysdate, 'sysdate+1/24/60');
   commit;
end;
/

--4.查看任务定时执行结果:
select to_char(cola,'yyyy/mm/dd hh24:mi:ss') 时间 from testa;
--5.跟踪任务的情况(查看任务队列):
select job, next_date, next_sec, failures, broken from user_jobs;
--6.停止定时任务(取上一步的JOB号,停止后Broken变为Y且NEXT_SEC变为0):
begin
   dbms_job.broken(37301, true, sysdate);
   commit;
end;
/

 

 

--7.再次启动定时任务
begin
dbms_job.run(37301);
end;
/

 

 

 

posted @ 2020-12-10 15:28  CathyGao2018  阅读(577)  评论(0编辑  收藏  举报