oracle 大表删除数据后,回收空间的问题。
在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表空间也会暴增。
oracle 大表删除数据后,回收空间的问题。的更多相关文章
- mysql优化, 删除数据后物理空间未释放(转载)
mysql优化, 删除数据后物理空间未释放(转载) OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTI ...
- 关于mysql 删除数据后物理空间未释放(转载)
转自 关于mysql 删除数据后物理空间未释放(转载) - NETDATA - 博客园http://www.cnblogs.com/shawnloong/archive/2013/02/07/2908 ...
- MySQL删除数据后磁盘空间的释放情况【转】
OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE TABLE 是指对表进行优化.如果已经删除 ...
- mysql 正确清理binlog 删除数据后磁盘空间的
(3条消息)MySQL删除数据后磁盘空间的释放情况 - ZERO - CSDN博客 https://blog.csdn.net/zero__007/article/details/51404091 m ...
- Mysql删除数据后磁盘空间未释放的解决办法【转】
转自 Mysql删除数据后,磁盘空间未释放的解决办法 - 今日头条(TouTiao.com)http://toutiao.com/a6303087712678412546/?tt_from=mobil ...
- 关于mysql 删除数据后物理空间未释放
转载自:http://www.cnblogs.com/shawnloong/archive/2013/02/07/2908911.html OPTIMIZE TABLE 当您的库中删除了大量的数据后, ...
- 关于mysql 删除数据后(.MYD,MYI)物理空间未释放
关于mysql 删除数据后物理空间未释放 OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE ...
- Oracle 删除数据后释放数据文件所占磁盘空间
测试的时候向数据库中插入了大量的数据,测试完成后删除了测试用户以及其全部数据,但是数据文件却没有缩小.经查阅资料之后发现这是 Oracle “高水位”所致,那么怎么把这些数据文件的大小降下来呢?解决办 ...
- RDS for MySQL 删除数据后空间没有减少处理方法
公司的程序和数据库部署在阿里云上,数据库使用的是阿里云的RDS,这天,经理在开发群中发了一个信息: 您的RDS实例rm********0oq的磁盘在过去一周平均使用率已超过80.%,建议您对实例规格进 ...
随机推荐
- 最近在学习UDP方面的通信,找到一个很棒的博客
http://blog.csdn.net/kesalin/article/details/8798039
- ssh连接远程linux服务器
1.在百度搜索输入"putty"然后进行下载,下载后无需安装只需要在文件中找到"putty.exe"双击即可运行. 2.在"Host Name or ...
- UVA 10795 A Different Task(汉诺塔 递归))
A Different Task The (Three peg) Tower of Hanoi problem is a popular one in computer science. Briefl ...
- extern “C”的作用
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同.作为一种欲与C兼容的语言,C++保留了一部分过程 式 ...
- Ubuntu下Java环境配置
Oracle Java安装: 通过以下命令进行安装: sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt ...
- 【转】Ext.ajax.request 中的success和failure
原文链接:Ext.ajax.request 中的success和failure Ajax request对象的success事件表示request过程中没有发生错误,和自己的业务逻辑无关, 如果访问不 ...
- PHP生成制作验证码
看完就会,不会你打我,话不多说.开搞(人狠话不多) 1.0 首先先看代码 <?php header("Content-Type:text/html;Charset=UTF-8" ...
- php 接收二进制流转换成图片
php 接收二进制流转换成图片,图片类imageUpload.php如下: <?php /** * 图片类 * @author http://blog.csdn.net/haiqiao_2010 ...
- 自己实现的库函数2(memset,memcmp,memcpy,memmove)
memset,memcmp,memcpy,memmove是对内存进行管理的库函数,为了更好的理解和使用这几个函数,自己用C语言实现一下~ //内存设置函数void* my_memset(void* d ...
- 《C和指针》章节后编程练习解答参考——6.3
<C和指针>——6.3 题目: 编写一个函数,把参数字符串中的字符反向排列. 函数原型: void reverse_string(char *string); 要求: 使用指针而不是数组下 ...