`
tjmzgn
  • 浏览: 156608 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle定时删除表空间的数据并释放表空间

阅读更多
这两天我一个朋友问我一个问题,他想定期删除一个表里数据,只保留最近一个星期的数据
,而且要考虑释放磁盘空间,所以我帮他做了个定时任务。判断时间是通过表里的一个列,类型
是数据型,是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)
分享到:
评论

相关推荐

    Oracle 定时删除数据 并释放空间

    Oracle 定时删除数据 并释放空间 ,创建存储过程并使用job完成。

    mysql数据库my.cnf配置文件

    # InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间 # 独立表空间优点: # 1.每个表都有自已独立的表空间。 # 2.每个表的数据和索引都会存在自已的表空间中。 # 3.可以实现单表在不同的数据库中...

    (重要)AIX command 使用总结.txt

    #查找根卷组下大于2M的文件, 并根据文件大小排序, 大文件在前. find / -xdev -size +1024 -ls |sort -r +6 8277 624 -r-xr-xr-x 1 root system 635390 Jul 31 2003 /sbin/helpers/jfs2/fsck 28 596 -rw-r--r-- 1 ...

    vc++ 开发实例源码包

    它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...

    vc++ 应用源码包_1

    它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...

    vc++ 应用源码包_2

    它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...

    vc++ 应用源码包_6

    它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...

    vc++ 应用源码包_5

    它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...

    vc++ 应用源码包_3

    它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...

Global site tag (gtag.js) - Google Analytics