博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle定时删除表空间的数据并释放表空间
阅读量:2381 次
发布时间:2019-05-10

本文共 1527 字,大约阅读时间需要 5 分钟。

这两天我一个朋友问我一个问题,他想定期删除一个表里数据,只保留最近一个星期的数据
,而且要考虑释放磁盘空间,所以我帮他做了个定时任务。判断时间是通过表里的一个列,类型
是数据型,是utc时间。刚开始还想把utc时间转化成现在的时间
utc时间是从1970年1月1号零时开始到现在的总秒数
declare
t number;
begin
t := (to_date('2004-10-12 00:00:00','yyyy-mm-dd hh24:mi:ss')-to_date('1970-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))*24*60*60*1000;
dbms_output.put_line(t);
end;
declare
t date;
begin
t := to_date('1970-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')+1097630923000/(24*60*60*1000);
dbms_output.put_line(to_char(t,'yyyy-mm-dd hh24:mi:ss'));
end;
但后来一想,那需要那么麻烦啊,只要计算出一周的秒数,用最能近的utc时间减去7天的总秒数,和七天前的时间做比较就ok了
于是方法如下:
1. //创建存储过程
create or replace procedure del_tab as
v_time number;
begin
   select max(aa.utc) into v_time from tablename ; //tablename换成你的表名
  
   execute immediate 'delete from tablename where tablename.utc<v_time-7*24*60*60*1000'; //删除7天前数据,如果不大量的查询这个表,不会有太大的影响,可以定期回收空间。
   create table temp as select * from tablename;  //创建临时表,为了释放空间
   execute immediate 'truncate table tablename';
   insert into tablename select * from temp;
   execute immediate 'drop table tablename';
   commit;
 
end;
2. //创建定时job
SQL> variable job_id  number;   //定义任务id
3.//启动任务(每天执行一次)
SQL> begin
  2  dbms_job.submit(:job_id,' trun_tab;',sysdate,'sysdate+1/24');   //这是每天执行,如果修改时间间隔可以修改“sysdate+1/144”
  3  end;
  4  /
4. 你可以测试下
SQL> select job,next_date,what from user_jobs; //用这个语句查看任务id,然后运行下面的语句
这个是立刻执行的
SQL> begin
  2  dbms_job.run(2);
  3  end;
  4  /
PL/SQL 过程已成功完成。
然后在查看表的内容 如果表的内容为空 ,证明已经删除了
5. //删除定时任务:
dbms_job.run(2)  
德国SNS交友/视频网站Poppen.de的技术架构
http://www.360doc.com/content/10/1228/19/835502_82105093.shtml

转载地址:http://ikzab.baihongyu.com/

你可能感兴趣的文章
sar的用法
查看>>
10g和11g自动任务的区别
查看>>
Mysql innodb存储引擎的性能优化
查看>>
PAT 1009 Product of Polynomials
查看>>
PAT 1010 Radix
查看>>
Eclipse导入工程时的中文乱码问题
查看>>
cms的banner和footer
查看>>
cms开发2 邮箱基本信息管理
查看>>
cms开发2 邮箱基本信息管理进度更新1
查看>>
HTML5 Input 类型
查看>>
图书管理系统 day01
查看>>
Mysql 如何设置updata_time自动获取当前时间
查看>>
jdbc连接数据库
查看>>
statement对象执行DDL语句
查看>>
使用jdbc创建一张员工表 员工表字段:编号,姓名,性别,年龄,职位,邮箱,电话
查看>>
Vuejs
查看>>
线程池
查看>>
修改wowpc变色龙
查看>>
当无论安装什么pkg安装包都会提示出错无法安装
查看>>
获取点击控件Name,并更改Text值
查看>>