oracle 数据 delect 后空间不释放问题 oracle数据库表空间不够,想根据delete 加约束条件删除部分数据,但是大家都知道delete不会释放表空间,请问有什么好的方法么?导入导出的感觉不太实际,一是数据太大,二是系统也在实时跑的,肯定有影响。delete操作我已经在做了,就几百万几百万的删记录,但是空间不释放的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1,分批删除提交2,做表压缩3,切换日志4,整表或按分区删除,不要用delete,用truncate -- 10g 以后,可以收缩表 ,注意:在收缩完后,手动收集一下统计信息-- 给你写个收缩表的例子 Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 Connected as oracle@ORALABSQL> SQL> create table test(id int, name char(1000)) ;Table createdSQL> insert into test select rownum, rownum from dual connect by rownum <= 10000 ;10000 rows insertedSQL> -- 表的初始大小SQL> select bytes / 1024 / 1024 from user_segments where segment_name = 'TEST' ;BYTES/1024/1024--------------- 12SQL> -- 删除数据后,表的大小SQL> delete test where mod(id,5) > 1 ;6000 rows deletedSQL> select bytes / 1024 / 1024 from user_segments where segment_name = 'TEST' ;BYTES/1024/1024--------------- 12SQL> alter table test enable row movement ;Table alteredSQL> alter table test shrink space ;Table alteredSQL> -- 收缩表后,表的大小SQL> select bytes / 1024 / 1024 from user_segments where segment_name = 'TEST' ;BYTES/1024/1024--------------- 4.625SQL> drop table test purge ;Table droppedSQL> delete是不会动高水位线的 3楼给了你方法但是作为生产库 你这种方式是不可能长久的 加盘吧 谁能把此语句接下去写玩??谢谢!在线等待!可用存储过程! 偶尔来逛逛,问个问题 经验丰富的人,帮我看下表有几千万条数据,如何修改sql,提高查询速度!! 数据恢复的高手请进,在线等 1000分征求oracle数据库对于海量数据的存储、查询解决方案 请教!!! 数据库文件设置的问题?救命用? plsql怎么写? 新人求助,建表过程提示缺少右括号 分页,每一页内某个字段重复列不超过两条,怎么实现 如何记录数据库执行的insert、update、delete? oracle导数据库空表不能导
2,做表压缩
3,切换日志
4,整表或按分区删除,不要用delete,用truncate
-- 10g 以后,可以收缩表 ,注意:在收缩完后,手动收集一下统计信息
-- 给你写个收缩表的例子
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as oracle@ORALABSQL>
SQL> create table test(id int, name char(1000)) ;
Table created
SQL> insert into test select rownum, rownum from dual connect by rownum <= 10000 ;
10000 rows inserted
SQL> -- 表的初始大小
SQL> select bytes / 1024 / 1024 from user_segments where segment_name = 'TEST' ;
BYTES/1024/1024
---------------
12
SQL> -- 删除数据后,表的大小
SQL> delete test where mod(id,5) > 1 ;
6000 rows deleted
SQL> select bytes / 1024 / 1024 from user_segments where segment_name = 'TEST' ;
BYTES/1024/1024
---------------
12
SQL> alter table test enable row movement ;
Table altered
SQL> alter table test shrink space ;
Table altered
SQL> -- 收缩表后,表的大小
SQL> select bytes / 1024 / 1024 from user_segments where segment_name = 'TEST' ;
BYTES/1024/1024
---------------
4.625
SQL> drop table test purge ;
Table droppedSQL>
但是作为生产库 你这种方式是不可能长久的
加盘吧