zoukankan      html  css  js  c++  java
  • 一次oracle大量数据删除经历

         oracle有个数据表现在已经有2500万条数据了,软件用到这个表的数据时就变的特别慢,所以准备把一个月以前的数据全部清除。

         我的步骤是(下边操作都是在plsql中运行的)

     1、首先 将这个月的数据导出到一个临时表中(这些数据是自己希望保留的)

       create table tempTable as select id,name from table1 where sj>to_date('2013-7-31 23:59:59','yyyy-mm-dd hh24:mi:ss');

    2、然后将2500万数据整个删除(这个是我在有备份情况下才用的)

    truncate table table1; 

    3、然后将整个表删除(因为事先从网上查了下,有网友说truncate后,直接把数据从临时表导回来事个数据文件没有变小,自己没有试)

    drop table table1;

    4、将数据从临时表全部导回来

    create table table1 as select id,name from tempTable;

    5、然后删除临时表

    drop table tempTable;

    这样整个过程用了大概10分钟左右就完成了。

    以上仅是自己操作心得,如有不正确或者更好的方法希望大家指正。

    附:来自http://www.cnblogs.com/simplefrog/archive/2012/07/30/2615169.html

    语法 delete from aa truncate table aa

    区别 1.delete from后面可以写条件,truncate不可以。

    2.delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少。

    3.delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。

    4.当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。

    5.如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变,而truncate后,种子会恢复初始。

    6.truncate不会触发delete的触发器,因为truncate操作不记录各个行删除。

    总结1.truncate和 delete只删除数据不删除表的结构(定义)        drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态。

      2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发     truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。

      3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动        显然drop语句将表所占用的空间全部释放        truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;   truncate会将高水线复位(回到最开始)。

      4.速度,一般来说: drop> truncate > delete。

         5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及。

    6.使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.     想删除表,当然用drop     想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete 如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

  • 相关阅读:
    jvm基本结构和解析
    多态的意思
    java中对象的简单解读
    double类型和int类型的区别
    python 解析xml文件
    win10不能映射Ubuntu共享文件
    Qt程序打包
    Ubuntu boot分区文件误删,系统无法启动,怎么解
    ubuntu Boot空间不够问题“The volume boot has only 5.1MB disk space remaining”
    Ubuntu 分辨率更改 xrandr Failed to get size of gamma for output default
  • 原文地址:https://www.cnblogs.com/songling/p/3279588.html
Copyright © 2011-2022 走看看