这两天我一个朋友问我一个问题,他想定期删除一个表里数据,只保留最近一个星期的数据
,而且要考虑释放磁盘空间,所以我帮他做了个定时任务。判断时间是通过表里的一个列,类型
是数据型,是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 1856FIRST_VALUE 功能描述:返回组中数据窗口的第一个值。 ... -
oracle定时任务(dbms_job)
2009-10-13 16:50 2300今天总结下oracle的任务队列管理器(job queue ) ... -
Decode函数的语法
2009-10-13 16:47 988Decode函数的语法结构如下: decode (expre ... -
Oracle 中truncate与delete的区别
2009-10-13 16:27 1025Oracle 中truncate与delete的区别 收藏 ... -
数据库---存储过程总结
2009-10-13 16:20 946定义: ... -
oracle执行计划的理解
2009-10-13 16:12 737执行计划的理解 计信息 ------------------ ... -
oracle定时添加或删除分区表的分区
2009-10-13 16:11 2081这几天,根据业务的需求和性能的考虑,需要定时删除历史数据,表里 ... -
Oracle常用数据字典表
2009-09-16 09:00 1106查看当前用户的缺省表空间 SQL>select us ... -
关于SQL中的“\”的转义
2009-05-30 08:23 947select ename from myemp where e ... -
Oracle存储过程学习(2)
2009-05-11 08:05 1145存储过程创建语法: create or rep ... -
ora-12154 TNS:"无法处理服务名"的一个解决方法
2009-04-13 15:48 1449很怪异的一个问题,在网络环境下配置客户端,竟然怎么也连不上主机 ... -
触发器
2009-02-10 20:27 1018触发器 触发器是指被隐含执行的存储过程,当发生特定事件(例如修 ... -
Oracle 包
2009-02-06 20:08 1205包 包用于逻辑组合相关的PL/SQL类型、项、子程序,它由包 ... -
函数的纯度级别以及使用
2009-02-05 16:09 943函数的纯度级别以及使用 - 定义由函数读取或修改的数据种类。 ... -
管理存储过程和函数
2009-02-05 10:47 743管理存储过程和函数 1.列出当前用户的子程序 SQL>c ... -
Oracle 自定义函数
2009-02-04 14:49 3621函数 函数用于返回特定数据。执行时得找一个变量接收函数的返回值 ... -
Oracle存储过程
2009-02-04 11:05 1044Oracle存储过程 存储过程不仅可以简化客户端应用程序的开发 ... -
PL/SQL DEVELOPER 基本用法详解
2009-02-03 10:37 2369一.编辑表数据(浏览表 ... -
游标(二)
2009-02-02 16:14 824游标FOR循环 游标FOR循环是游标使用的最简单的方式,当使用 ... -
游标(一)
2009-02-01 15:28 812使用游标 当在pl/sql块中 ...
相关推荐
Oracle 定时删除数据 并释放空间 ,创建存储过程并使用job完成。
4. **创建新的临时表空间并指定表空间组:** ```sql -- 创建名为tmp10的临时表空间,并将其添加到表空间组tmpgrp1中 CREATE TEMPORARY TABLESPACE tmp10 TEMPFILE 'd:\orcl\tmp\tmp11.ora' SIZE 2048M ...
总之,定时删除Oracle日志脚本是一个实用的工具,它帮助我们有效地管理数据库日志,释放存储空间,同时保持数据安全。不过,使用时一定要遵循最佳实践,确保在删除日志文件之前做好备份,并理解删除日志对数据库的...
首先,删除大量数据并不是理想的解决方案,因为Oracle数据库中的物理空间不会因`DELETE`操作而立即释放。这是由于高水位标记(High Water Mark)的概念,即使删除了行,原有的空间仍会被保留,直到新的数据填充或...
这些脚本通常包含一系列SQL命令和操作系统级别的指令,旨在安全地删除不再需要的归档日志,以释放存储空间,并保持数据库的健康运行状态。归档日志管理对于保持数据库性能至关重要,因为过多的归档日志会占用大量...
定时删除脚本则是为了定期清理这些归档数据,避免归档空间无限制增长。 首先,理解数据库归档的原理是至关重要的。归档操作通常在事务处理数据库中进行,特别是那些需要长期保留历史数据的系统,如金融交易或医疗...
- `delete noprompt obsolete` 命令用于自动删除已过期的备份集,以释放磁盘空间。 - `archive log current` SQL 语句确保当前的归档日志被备份,以支持完整恢复链。 6. **RMAN 脚本详解**: - `allocate ...
本文将深入解析如何在Linux环境下设置定时任务来定期执行特定操作,特别是删除日志或无用文件,以释放磁盘空间,保持系统的高效运行。 ### 一、问题背景 在日常的系统维护过程中,我们可能会遇到由于应用程序频繁...
总之,通过在Linux上设置Cron定时任务和编写RMAN脚本,我们可以自动化地管理和清理Oracle数据库的归档日志,从而优化存储空间并确保数据库的高效运行。这个过程涉及到Linux系统管理、Oracle数据库管理和脚本编程,是...
这些内置包极大地简化了Oracle数据库的管理和开发工作,熟练掌握它们的使用能够提高工作效率,优化数据库性能,并保证数据的安全。在实际应用中,应根据具体需求选择合适的包,并正确调用其成员函数,遵循最佳实践,...
- **Statspack**:通过`spcreate.sql`和`spdrop.sql`脚本来创建和删除Statspack表空间;`spauto.sql`用于设置自动采样;`spreport.sql`用于生成性能报告。 - **ASH(Active Session History)**:记录活动会话的历史...
总结来说,Oracle DG归档日志清理脚本是用于自动化清理数据库不再需要的旧归档日志文件,以释放磁盘空间。通过设置定时任务,可以确保清理过程按照预设的时间间隔进行,从而保持数据库环境的整洁和高效。在执行这类...
- 超过10天的备份文件会被自动删除,以释放存储空间。 ### 二、脚本核心参数解析 接下来,我们将对脚本中的几个关键部分进行详细解释。 #### 1. 备份目录配置 ```batch set BACKUP_DIR=D:\DATABACKUP set ...
1. **RMAN(恢复管理器)**:RMAN是Oracle数据库内置的备份和恢复工具,它可以执行全量备份、增量备份、表空间备份等多种备份类型,并支持自动优化备份策略。 2. **连接目标数据库**:`connect target /`命令用于...
这些备份脚本都包含了`crosscheck`、`delete noprompt expired`和`delete noprompt obsolete`命令,用于检查备份的有效性,并自动删除过期和无用的备份,以节省存储空间。 总的来说,这个文档提供了在Linux环境中...
通过配置,用户可以实现对整个数据库实例或者特定数据库、表的备份,并且可以选择是否进行压缩和加密,以节省存储空间并保护数据安全。 文件加密是这类备份软件的关键特性之一,它能够对备份文件进行加密处理,防止...
此时,数据日志文件清理工具就能发挥关键作用,它能够安全地删除或归档不再需要的日志数据,从而释放磁盘空间。 SqlClear.exe 和 SqlClear 可能是这个工具的两个组成部分,其中 SqlClear.exe 可能是可执行文件,...