这两天我一个朋友问我一个问题,他想定期删除一个表里数据,只保留最近一个星期的数据
,而且要考虑释放磁盘空间,所以我帮他做了个定时任务。判断时间是通过表里的一个列,类型
是数据型,是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)
,而且要考虑释放磁盘空间,所以我帮他做了个定时任务。判断时间是通过表里的一个列,类型
是数据型,是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特别函数---First_Value
2009-11-10 14:09 1832FIRST_VALUE 功能描述:返回组中数据窗口的第一个值。 ... -
oracle定时任务(dbms_job)
2009-10-13 16:50 2267今天总结下oracle的任务队列管理器(job queue ) ... -
Decode函数的语法
2009-10-13 16:47 942Decode函数的语法结构如下: decode (expre ... -
Oracle 中truncate与delete的区别
2009-10-13 16:27 993Oracle 中truncate与delete的区别 收藏 ... -
数据库---存储过程总结
2009-10-13 16:20 916定义: ... -
oracle执行计划的理解
2009-10-13 16:12 709执行计划的理解 计信息 ------------------ ... -
oracle定时添加或删除分区表的分区
2009-10-13 16:11 2033这几天,根据业务的需求和性能的考虑,需要定时删除历史数据,表里 ... -
Oracle常用数据字典表
2009-09-16 09:00 1078查看当前用户的缺省表空间 SQL>select us ... -
关于SQL中的“\”的转义
2009-05-30 08:23 891select ename from myemp where e ... -
Oracle存储过程学习(2)
2009-05-11 08:05 1122存储过程创建语法: create or rep ... -
ora-12154 TNS:"无法处理服务名"的一个解决方法
2009-04-13 15:48 1425很怪异的一个问题,在网络环境下配置客户端,竟然怎么也连不上主机 ... -
触发器
2009-02-10 20:27 985触发器 触发器是指被隐含执行的存储过程,当发生特定事件(例如修 ... -
Oracle 包
2009-02-06 20:08 1164包 包用于逻辑组合相关的PL/SQL类型、项、子程序,它由包 ... -
函数的纯度级别以及使用
2009-02-05 16:09 904函数的纯度级别以及使用 - 定义由函数读取或修改的数据种类。 ... -
管理存储过程和函数
2009-02-05 10:47 712管理存储过程和函数 1.列出当前用户的子程序 SQL>c ... -
Oracle 自定义函数
2009-02-04 14:49 3589函数 函数用于返回特定数据。执行时得找一个变量接收函数的返回值 ... -
Oracle存储过程
2009-02-04 11:05 1018Oracle存储过程 存储过程不仅可以简化客户端应用程序的开发 ... -
PL/SQL DEVELOPER 基本用法详解
2009-02-03 10:37 2342一.编辑表数据(浏览表 ... -
游标(二)
2009-02-02 16:14 799游标FOR循环 游标FOR循环是游标使用的最简单的方式,当使用 ... -
游标(一)
2009-02-01 15:28 780使用游标 当在pl/sql块中 ...
相关推荐
Oracle 定时删除数据 并释放空间 ,创建存储过程并使用job完成。
# InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间 # 独立表空间优点: # 1.每个表都有自已独立的表空间。 # 2.每个表的数据和索引都会存在自已的表空间中。 # 3.可以实现单表在不同的数据库中...
#查找根卷组下大于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 ...
它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...
它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...
它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...
它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...
它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...
它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...