经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Oracle » 查看文章
oracle删除超过N天数据脚本的方法
来源:jb51  时间:2022/2/28 15:24:24  对本文有异议

公司内做的项目是工厂内的,一般工厂内数据要求的是实时性,很久之前的数据可以自行删除处理,我们数据库用的oracle,所以就想着写一个脚本来删除,这样的话,脚本不管放在那里使用都可以达到效果

由于服务器是windows,参照Oracle Shell Scripting中,我们写一下windows下的脚本

首先删除数据的sql语句写一下

  1. DELETE FROM tablename WHERE createdtime<TRUNC(SYSDATE)-59; --删除59天前的数据
  2. commit; --提交事务
  3. alter table tablename enable row movement; --数据删除之后会产生很多空行,打开行移动,移动之后rowid会发生变化
  4. alter table tablename shrink space; --连同索引一起压缩,解决delete语句造成的空间未释放问题
  5. alter table tablename disable row movement; --关闭行迁移

这一段相当于

  1. SPOOL C:\emp.lst
  2. SET LINESIZE 100
  3. SET PAGESIZE 50
  4. SELECT *
  5. FROM emp;
  6. SPOOL OFF

所以我们得到了一个新的sql文件,例如C:\emp.sql

  1. CONNECT scott/tiger
  2. --开始删除
  3. DELETE FROM tablename WHERE createdtime<TRUNC(SYSDATE)-59;
  4. commit;
  5. alter table tablename enable row movement;
  6. alter table tablename shrink space;
  7. alter table tablename disable row movement;
  8. --结束删除
  9. --如果删除多个表,可以将上面语句复制一下,tablenamewhere条件修改一下就可以了
  10. EXIT;

然后创建一个文件C:\get_emp.bat

  1. @echo off
  2. echo 开始删除过期数据并缩容
  3. sqlplus /nolog @C:\emp.sql
  4. echo 执行成功
  5. pause
  6. exit

保存之后,执行一下看会不会出现问题,如果不会出现问题,添加一下windows的任务计划程序,或者自己写一个windows服务,定期调用一下这个bat就可以了

linux版本的类似,写法这个连接下面有,写完之后先进行测试,然后使用cron或者其他进行定期调用即可

当然,操作数据库表不局限于定期清理数据,也可以进行报表生成、新表创建等其他操作

到此这篇关于oracle删除超过N天数据脚本的文章就介绍到这了,更多相关oracle删除数据脚本内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号