IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 番外-oracle数据库自动对数据库过期数据清除 -> 正文阅读

[大数据]番外-oracle数据库自动对数据库过期数据清除

照着这篇文章来的
原理:通过定时器调用数据清理的存储过程

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 null
  ISRUN   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' then
  v_sql := 'delete from ' || v_name||' where '|| v_remark||' <  TRUNC(SYSDATE- '||v_value||')' ;
  dbms_output.put_line('删除的sql:' || v_sql);
  else
  v_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;
  begin
   execute 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)

begin
	dbms_scheduler.run_job('Job_DBA_AUTODELETE',FALSE);
	end;

3,停用job任务

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

4,删除job任务

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

5,批量删除大量数据

照的这篇文章
不到30万条,不到20秒,可能有更快的方法,现在没有找到。




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中,最多填充5000FETCH cur_cdd 
	BULK COLLECT INTO id_list
	LIMIT 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!');
--异常处理
exception
   when no_data_found then 
    dbms_output.put_line('未找到数据');
END;

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:04:09  更:2022-10-31 12:07:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:37:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码