照着这篇文章来的
原理:通过定时器调用数据清理的存储过程
连接数据库的工具用的是navicat 16

1建立数据库任务配置表

SQL语句:

create table SYS_DBA_CONFIG
(NAME    VARCHAR2(250) not null,value   VARCHAR2(250) not null,type    VARCHAR2(200) not null,REMARK  VARCHAR2(200)  not nullISRUN   NUMBER(1) not null,COLUMNTYPE VARCHAR2(200)
);

配置表字段说明:

2,创建数据清理的存储过程(根据保留天数删除数据)


SQL语句:

CREATE OR REPLACE PROCEDURE PSH."DBA_AUTODELETE" AS/*******************************************************功能:根据保留天数删除数据V1.0说明:表名称、保存天数从配置表SYS_DBA_CONFIG读取********************************************************/v_name         varchar2(250); --对应的表名v_remark       varchar2(250); --对应的表字段v_value        number(10); --表对应的表数据天数v_endTime      date; --清除的具体时间v_sql       varchar2(250);v_columntype   varchar2(20);CURSOR CS IS SELECT Name,VALUE,remark,columntype FROM SYS_DBA_CONFIG WHERE LOWER(TYPE)='auto_delete_table' AND ISRUN=1;
BEGIN
OPEN CS;
LOOP
FETCH CS INTO v_name, v_value,v_remark,v_columntype;--获得当前记录的数据EXIT WHEN CS%NOTFOUND;dbms_output.put_line('删除的表名:' || v_name||'  保留天数:'||v_value);v_endTime:=TRUNC(SYSDATE- v_value);if v_columntype='DATE' thenv_sql := 'delete from ' || v_name||' where '|| v_remark||' <  TRUNC(SYSDATE- '||v_value||')' ;dbms_output.put_line('删除的sql:' || v_sql);elsev_sql := 'delete from ' || v_name||' where to_date('||v_remark||',''yyyy-mm-dd hh24:mi:ss'') <  TRUNC(SYSDATE- '||v_value||')';dbms_output.put_line('删除的sql:' || v_sql);end if;beginexecute immediate v_sql;end;
END LOOP;END DBA_AutoDelete;

主要是要执行这一条SQL语句,可以根据自己需要自己修改

 v_sql := 'delete from ' || v_name||' where to_date('||v_remark||',''yyyy-mm-dd hh24:mi:ss'') <  TRUNC(SYSDATE- '||v_value||')';

执行完毕后,如果你使用的是navicat,那么会在这里看到

3,创建Job定时器


这里写时间间隔为一分钟是为了马上看到删除结果。
时间间隔当然还有其他的,比如:
每隔10天执行一次

REPEAT_INTERVAL => 'FREQ=DAILY; INTERVAL=10’;

每月15号执行一次

REPEAT_INTERVAL => 'FREQ=MONTHLY; BYMONTHDAY=15’;

每月最后一天执行一次

REPEAT_INTERVAL => 'FREQ=MONTHLY; BYMONTHDAY=-1';

就不一一列举了
SQL语句:

begin
dbms_scheduler.create_job
(
job_name => 'Job_DBA_AUTODELETE',
job_type => 'PLSQL_BLOCK',
job_action => 'begin DBA_AUTODELETE; end;',
repeat_interval => 'FREQ=MINUTELY;INTERVAL=1;',
enabled => true
);
end;

当执行完整个SQL语句之后,定时器就开始工作了,我们的目的也达到了。

4,Job定时器的一些方法

1,查询所有job任务

select * from dba_scheduler_jobs;

2,启用job任务(根据名称,比如刚刚创建的Job_DBA_AUTODELETE)

begindbms_scheduler.run_job('Job_DBA_AUTODELETE',FALSE);end;

3,停用job任务

begindbms_scheduler.stop_job(job_name => 'Job_DBA_AUTODELETE',force => TRUE);end;

4,删除job任务

begindbms_scheduler.drop_job(job_name => 'Job_DBA_AUTODELETE',force => TRUE);end;

5,批量删除大量数据

照的这篇文章
不到30万条,不到20秒,可能有更快的方法,现在没有找到。
(可能有点问题,删除某一历史表,只有一个主键,1亿五千万条数据删了十几个小时?)

DECLARE--声明一个主键的集合类型TYPE ids_tbl IS TABLE OF MD_IOT_TAGHISTORY.NVFID%TYPE;id_list ids_tbl;INC NUMBER;LEN NUMBER:=5000;--创建游标CURSOR cur_cdd IS SELECT t.nvfid FROM MD_IOT_TAGHISTORY t WHERE T.SAVETIME< add_months(sysdate,-6);
BEGIN
--打开游标
OPEN cur_cdd;
LOOP--游标中的值取出来填充到id_list中,最多填充5000个FETCH cur_cdd BULK COLLECT INTO id_listLIMIT LEN;-- 循环5000次,根据主键清理数据FORALL i IN 1..id_list.count        DELETE FROM MD_IOT_TAGHISTORY t where t.NVFID=id_list(i);--每5000条提交一次事务commit;--游标中取不出来东西的时候,结束循环EXIT WHEN cur_cdd%NOTFOUND;
END LOOP;
--关闭游标
CLOSE cur_cdd;
dbms_output.put_line('finished!');
--异常处理
exceptionwhen no_data_found then dbms_output.put_line('未找到数据');
END;

番外-oracle数据库自动对数据库过期数据清除相关推荐

  1. mysql数据库自动生成数据库开发设计文档

    1.输出表结果,表结构可自己通过代码调整,简单但是有时候很实用,可以节省大量的时间,主要思路: a 在java代码中,通过数据库查询语句获取所有表名和表名备注信息. b 通过表名获取某张表的所有字段说 ...

  2. oracle 定时清理表数据,关于Oracle存储过程和调度器实现自动对数据库过期数据清除的问题...

    简介 数据库中的某些数据不一定要长期保存,例如:日志等数据.当保存一定时间后,系统允许删除所以系统需要定期删除那些已经过期的数据. 实现原理 1张表(SYS_DBA_CONFIG).1个Job定时器( ...

  3. windows10 oracle自动备份,Windows系统下oracle 自动备份数据库

    Windows系统下oracle 自动备份数据库 1.创建批处理文件(.bat) 2.建立windows 定时任务 2.1创建任务 2.2 常规处 ->填写任务名称 2.3触发器 2.4 操作 ...

  4. Linux oracle数据库自动备份自动压缩脚本代码

    Linux oracle数据库自动备份自动压缩脚本代码 Linux oracle数据库备份完成后可以自动压缩脚本代码. 复制代码代码如下: #!/bin/bash #backup.sh #edit: ...

  5. oracle数据库自动备份

    oracle数据库自动备份 环境:windows server2008操作系统,oracle 10.2.0数据库 工具:windows命令窗口 ,windows任务计划 命令:exp  profile ...

  6. delphi Oracle导出多个表,Oracle数据库自动备份工具(Delphi源码)

    Oracle数据库自动备份工具(Delphi源码) 下载地址:http://www.blogjava.net/Files/96sd2/OraSvr.rar 『OracleBackupService』简 ...

  7. Oracle数据库自动存储管理(ASM)

    关于ASM的讨论很多,但是到底什么是ASM?ASM是一个有效的抽象层,使你的Oracle数据库可以与叫做diskgroups的抽象空间一起使用,而不是直接使用datafiles.这带来了很多好处,但是 ...

  8. Oracle 数据库自动诊断库 ADR(Automatic Diagnostic Repository)简介

    作者介绍 姚远:鼎甲科技高级技术顾问,墨天轮MVP.Oracle ACE,华为云MVP,专注于 Oracle.MySQL 数据库多年,拥有 Oracle 10g.12c OCM, MySQL 5.6. ...

  9. mysql数据库随机生成数据库_MySQL 从零开始:08 番外:随机生成数据库数据

    学习数据库时,难免需要一些数据进行实验,对于小数据量的数据来说,我们自己想一些数据并插入到数据库即可,但是如果需要大量的数据时,手动输入将是一项繁琐的工作,我们也不一定能编那么多数据.基于以上,自动生 ...

最新文章

  1. fetchMetadata: sill install loadAllDepsIntoIdealTree
  2. SAP RETAIL 根据Allocation Rule去创建分配表
  3. python datetime计算时间差_Python中关于日期的计算总结
  4. iOS开发多线程篇—线程的状态
  5. linux下执行shell修改用户密码,[转] 关于linux下通过shell命令(自动)修改用户密码...
  6. extjs官网+extjs官网案例
  7. matplotlib scale 刻度
  8. [快报]one-tom惊现16岁小龄学员。。。
  9. Jenkins定时构建和轮询SCM设置说明
  10. Python处理 JSON 数据
  11. C学习笔记之---八皇后算法
  12. Java程序设计课程设计_《JAVA程序设计》课程设计
  13. ArcGIS 裁剪地图显示范围
  14. 跟小博老师一起学习MyBatis ——MyBatis搭建运行环境
  15. 移动宽带连接电信服务器不稳定,移动宽带速度为啥与电信差距那么大?工信部官宣告诉你...
  16. 北京第二外国语学院本科毕业论文答辩PPT模板
  17. Python遇到过得text和text()
  18. 【回归预测-FNN预测】基于粒子群优化前馈网络实现对婚姻和离婚数据回归预测附matlab代码
  19. 形容长得丑的30句经典句子
  20. HTML网页设计基础笔记 • 【第1章 HTML5基础】

热门文章

  1. 【疯壳·智能机器人教程4】人形街舞机器人-PC 上位机在线调试
  2. 教你自定义竖直跑马灯效果(广告专用)
  3. SDWAN可以为跨境电商做什么?
  4. 怎么运用网络营销获得精准的客户?
  5. hprof是什么文件?可以删除吗
  6. 分享生活中三个小故事
  7. 百度AI助盲行动落地广州,盲人按摩师傅有了人工智能帮手
  8. 高通平台msm8917蓝牙mac地址流程
  9. Activiti基础教程--07流程执行历史记录(历史任务、历史流程实例、历史活动)
  10. python 图像iou_Python MTCNN(人脸检测)项目附代码讲解(2)-NMS/IOU工具介绍