oracle 大表删除数据后,回收空间的问题。
在oracle中由于表结构设计不合理或者需要清楚老数据的时候,经常需要对大表数据进行清理。 一般有一下几种方法: 1. 删除大部分数据,留下小部分数据。我们可以把需要保留的数据转移到别的表,然后再把大表drop掉,然后改名就行了; a) create table tablename_min as select * from tablename_max awhere 需要保留的数据. b) drop table tablename_max ; c) rename tablename_min as tablename_max ; 这样就能清除这个大表的hwm,而且释放掉其他空间。 这时我们就应该考虑使用shrink table的方式。 a) 我们可以先用delete from tablename_max; b) 由于我们进行了数据的delete 所以造成了 tablename_max 这张表的数据稀疏,数据块并没有减少,hwm也没有减少,这样就会影响全表扫描需要访问更多的数据块。这时我们可以通过shrink来重组数据使数据分布更紧密,同时降低HWM释放空闲数据块。 c)由于需要移动行数据,数据的rowid会发生变化,所以需要设置表的row movement属性: alter table tablename_max shrink space cascade;--收缩表并降低hwm,并且回收相应的索引。 由于我们删除了大量的数据 ,相应的索引也进行了删除,这时需要对索引进行收缩。 alter index idxname shrink space; alter tabletablename_maxenable row movement语句会造成引用表tablename_max的对象(如存储过程、包、视图等)变为无效。执行完成后,最好执行一下utlrp.sql来编译无效的对象。 由于是通过DML操作进行的,会产生大量redo,注意archivelog目录的空间大小问题;同时undo表空间也会暴增。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – 需要对proc和lambda的难忘的解释
- 使用json.net和包含@符号的json属性反序列化为F#类型
- 仅用aspx文件实现Ajax调用后台cs程序。(实例)
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(20)----模型,
- 回传每个Ruby代码行像sh -x?
- 如何为xmllint设置目录文件?
- vb.net – my.computer在file.create之后无法访问文件
- 各种nosql数据库的比较Cassandra,MongoDB,CouchDB,Redis,Ri
- vue实现nav导航栏的方法
- OCP考题解析_043: flashback logs