在oracle中由于表结构设计不合理或者需要清楚老数据的时候,经常需要对大表数据进行清理。

一般有一下几种方法:

1. 删除大部分数据,留下小部分数据。我们可以把需要保留的数据转移到别的表,然后再把大表drop掉,然后改名就行了;

a) create table tablename_min as select * from tablename_max a where 需要保留的数据.

b) drop table tablename_max ;

c) rename tablename_min as tablename_max ;

这样就能清除这个大表的hwm,而且释放掉其他空间。
     2.当删除的数据只是一小部分数据的话,第一种方法就不适用了。比如 3亿条数据,你删除一亿条数据的话,用1就不合适。

这时我们就应该考虑使用shrink table的方式。

a) 我们可以先用delete from tablename_max;

b) 由于我们进行了数据的delete 所以造成了 tablename_max 这张表的数据稀疏,数据块并没有减少,hwm也没有减少,这样就会影响全表扫描需要访问更多的数据块。这时我们可以通过shrink来重组数据使数据分布更紧密,同时降低HWM释放空闲数据块。

c)由于需要移动行数据,数据的rowid会发生变化,所以需要设置表的row movement属性:
            alter table tablename_max enable row movement; --开启行迁移功能。
            alter table tablename_max shrink space compact;--(可以在压缩期间进行DML操作和查询) ,收缩表,不会降低hwm
            alter table tablename_max shrink space; --( 调整HWM时将阻塞DML操作),收缩表,并且降低hwm

alter table tablename_max shrink space cascade;--收缩表并降低hwm,并且回收相应的索引。

由于我们删除了大量的数据 ,相应的索引也进行了删除,这时需要对索引进行收缩。

alter index idxname shrink space;
       注意:shrink table只会针对assm(自动段空间管理)的表有用,否则会报: ORA-10635: Invalid segment or tablespace type。

alter table tablename_max enable row movement语句会造成引用表tablename_max的对象(如存储过程、包、视图等)变为无效。执行完成后,最好执行一下utlrp.sql来编译无效的对象。

由于是通过DML操作进行的,会产生大量redo,注意archivelog目录的空间大小问题;同时undo表空间也会暴增。

最新文章

  1. sqlmap的安装方法
  2. 用于所有Windows驱动程序开发者的概念
  3. javascript垃圾回收机制
  4. bzoj 1036 Tree Count
  5. "_Default"同时存在于两个dll文件中的解决办法
  6. PHP设计模式笔记七:观察者模式 -- Rango韩老师 http://www.imooc.com/learn/236
  7. onchange、onclick、onblur等事件区别
  8. webpack----webpack4尝鲜
  9. 微信小程序发布
  10. design language
  11. IMU 标定 | 工业界和学术界有什么不同?
  12. iOS Build Apps for the World WWDC
  13. Api文件
  14. 解决Could not load file or assembly CefSharp.Core.dll的问题
  15. SCRUM 12.19
  16. 20190122 loop
  17. 发送html内容的email(转)
  18. kendo ui - DropDownList 下拉列表系列
  19. 20162307 课堂测试 hash
  20. Monkey测试练习

热门文章

  1. WindowListener中的windowClosed方法不执行的问题。
  2. (一)问候Hibernate4
  3. iOS8 【xcode6中添加pch全局引用文件】
  4. O-C相关-08-动态类型与静态类型
  5. PAT_1002 写出这个数
  6. Sdut 2409 The Best Seat in ACM Contest(山东省第三届ACM省赛 H 题)(模拟)
  7. C++类继承内存布局(二)
  8. 二进制方式快速安装MySQL数据库命令集合
  9. Android中图片的异步加载
  10. C#实现记事本查找功能