大型的项目中通常会有一张表用来记录操作日志,日志的不断生成,资源的占用越来越大。
日志表的数据越来越多除了占用资源之外,对于后续的查询压力也会变大。
我们需要实现一个定时清理,来保证数据库不被垃圾数据塞满。
以上作为举例,作为定时任务实际上可以适用于很多业务场景。
首先创建一个清理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(替换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等函数进行实现。
此处不进行赘述。
当前还没有观点发布,欢迎您留下足迹!
存储过程是个好东西,WEB工程在架构阶段会设计很多存储过程,后续在架构中开发需求的时候,反而会直接写SQL完成各项诉求。所以说,这玩意儿略微有那么一点点伪高端。
为了方便数据的处理,或者本身有特殊的数据格式要求,我们可以使用SPOOL命令导出Oracle数据库数据数据文件,并指定格式,高效且强大...
Linux系统下的Oracle数据库实用常用的维护命令整理,本文内容偏向运维,主要包含:基础启动重启、表空间维护、数据库角色与用户维护、字符集配置等,并给出各类场景的实例语句
对于数据库而言,多表连接操作可以算的上是基本操作,在 MongoDB 通过 $lookup 聚合查询可以实现多表左连接查询,在后续的版本中 $lookup 得到了一系列的增强,实现更为复杂的关联查询
MySql数据库在Linux系统下默认数据库名与表名严格区分大小写,一般情况下我们创建表名习惯使用全小写,如果遇到某些从Windows服务器迁移过来的数据库可能需要设置大小写不敏感
安装 MySql 出现“由于找不到 MSVCP120.dll ,无法继续执行代码。重新安装程序可能会解决此问题。”由于系统缺少 vcredist 导致,下载安装官方 vcredist 即可。