📖Orcale定时任务管理dbms_job

发布: 2019-11-08
热度: 46
趋势: 46
权重: 0
🎯

在Oracle中创建、运行、维护定时任务,配合存储过程可以完成很多特定的业务诉求,dbms_job提供了使用的API功能便于我们实现更为细致的定时任务管理

诉求

大型的项目中通常会有一张表用来记录操作日志,日志的不断生成,资源的占用越来越大。

日志表的数据越来越多除了占用资源之外,对于后续的查询压力也会变大。

我们需要实现一个定时清理,来保证数据库不被垃圾数据塞满。

以上作为举例,作为定时任务实际上可以适用于很多业务场景。

存储过程

首先创建一个清理 180 天前操作日志的存储过程:

--删除操作日志存储过程
create or replace procedure P_CLEARLOG
as   
begin     
--删除入库时间180天前的数据   
  DELETE mebugs_operlog t WHERE (sysdate - to_date(t.writetime,'yyyyMMddhh24miss')) > 180; 
end;
/

定时任务

接着创建一个定时任务:

--建议一个定时任务,每天0点执行
--declare定义了一个任务ID,创建的定时任务ID就是job_no
--dbms_job.submit(任务ID,存储过程,下次执行,执行间隔); 
declare job_no number;  
begin  
dbms_job.submit(job_no,'P_CLEARLOG;',sysdate,'TRUNC(SYSDATE + 1)');  
commit;  
end; 
/

常见管理语句

--查询当前用户的JOB列表
select * from user_jobs;
--查询数据库所有的JOB列表(DBA权限)
select * from dba_jobs;
--执行定时任务(需要先查询上文的job_no是多少,比如:533)
begin  
dbms_job.run(533);--533为JOBID
end; 
/

API

--其他API(替换dbms_job.run(533);)
--删除
dbms_job.remove(533);  
--停止
dbms_job.broken(533, true, sysdate);
--修改存储过程
dbms_job.what(533, 'P_CLEARLOG_NEW');
--修改执行时间早六点
dbms_job.next_date(533, 'TRUNC(SYSDATE + 1)+6/24');
--修改执行间隔两天
dbms_job.interval(533, 'TRUNC(SYSDATE + 2)');

小结

执行间隔&下次执行,可以有多种时间组合。

通过如:TRUNC、next_day、LAST_DAY、ADD_MONTHS 等函数进行实现。

此处不进行赘述。

当前文章暂无讨论,留下脚印吧!
大纲
  • 诉求
  • 存储过程
  • 定时任务
  • 常见管理语句
    • API
  • 小结
提交成功,请等待审核通过后全面展示!

发表评论

昵称
邮箱
链接
签名
评论

温馨提示:系统将通过浏览器临时记忆您曾经填写的个人信息且支持修改,评论提交后仅自己可见,内容需要经过审核后方可全面展示。

选择头像