在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 大表删除数据后,回收空间的问题。相关推荐

  1. mysql 空位补0_MySQL 删除数据后物理空间未释放

    MySQL 删除数据后物理空间未释放 1. 进入数据库目录: cd  /var/lib/mysql/ 2. 备份要保存的数据库文件(切记!必须备份!部分数据库文件需要恢复!) mysqldump -h ...

  2. oracle修改删除数据,[Oracle 错误修改删除数据后的恢复方法

    [Oracle ERP维护人员必备] 错误修改删除数据后的恢复方法 Oracle ERP维护人员工作再小心也难免会有在正式库中误删或者误改数据并且已经commit的情况发生,那么我就要用到 - Ora ...

  3. truncate数据后回收空间_Truncate用法详解

    前言: 当我们想要清空某张表时,往往会使用truncate语句.大多时候我们只关心能否满足需求,而不去想这类语句的使用场景及注意事项.本篇文章主要介绍truncate语句的使用方法及注意事项. 1.t ...

  4. oracle备份数据表叫什么,oracle备份表和数据

    oracle 备份数据 如果备份表存在 原表t_base_employee,备份表t_base_employee20180718 insert into t_base_employee0718 sel ...

  5. oracle发现表被锁后又没了,Oracle的表被锁后的恢复

    运行下列SQL,找出数据库的serial#,执行结果如下图所示 SELECT T2.USERNAME, T2.SID, T2.SERIAL#, T2.LOGON_TIME   FROM V$LOCKE ...

  6. mysql .myd_关于mysql 删除数据后(.MYD,MYI)物理空间未释放

    关于mysql 删除数据后物理空间未释放 OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE ...

  7. Oracle 删除数据后释放数据文件所占磁盘空间

    . . . . . 测试的时候向数据库中插入了大量的数据,测试完成后删除了测试用户以及其全部数据,但是数据文件却没有缩小.经查阅资料之后发现这是 Oracle "高水位"所致,那么 ...

  8. mongo如何删除数据后相应的删除空间和内存占用

    mongo如何删除数据后相应的删除空间和内存占用 Q: mongo数据变大之后,删除不需要的表和数据之后,内存和磁盘空间都没有释放. A: 这是mongo机制,只有删除数据库时才会回收相应的空间,否则 ...

  9. mysql 释放空间_Mysql InnoDB删除数据后释放磁盘空间的步骤详解

    Mysql InnoDB删除数据后释放磁盘空间的方法 Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长. 如果在创建数据库的时候 ...

最新文章

  1. 自定义控件学习,优秀网站推荐
  2. AngularJS-Hello World
  3. django框架 day07
  4. Cesium:加载百度地图
  5. liu系统的混沌特性及其matlab仿真,毕业论文-Liu系统的混沌特性及其Matlab仿真
  6. C#反编译工具:.NET Reflector导出代码
  7. 人体检测模块的——微波雷达的推荐和使用
  8. Latex 中导入visio画的图片,去除多余留白
  9. KubeCon + CloudNativeCon + Open Source Summit 2019大会上海开幕看点不断!
  10. 物理地址和虚拟地址的概念
  11. 源生ajax同步异步请求,源生JS怎样实现文件异步上传
  12. 用innobackupex做全量备份
  13. Android实习面试经验汇总,骚年你的屏幕适配方式该升级了
  14. lda plda主题模型
  15. Python图像处理:使用TensorFlow或Keras进行图像分类
  16. eclipse没有提示
  17. outline的使用和创建
  18. php iocp,完成端口(iocp)实现高性能网络服务器
  19. 基于Unity3D平台的三维虚拟城市研究与应用
  20. 星巴克全球之最!和阿里一起为未来零售搞事情

热门文章

  1. 3.5计算机网络(无线局域网 PPP协议&HDLC协议 广域网 链路层设备)
  2. 用免疫算法解决TSP问题
  3. Git私服客户端免密码登录
  4. 哥德巴赫猜想程序(C语言)
  5. ERP中各种乱码处理
  6. pcb布线时爬电距离的总结与算法
  7. 《WEB安全渗透测试》(23):记一次利用SSRF漏洞到提权
  8. C# 程序创建word文件与表格
  9. RT-ThreadXSTM32F407智能车培训报名啦!
  10. PowerBI利用市场可视化组件Hierarchy Chart by Akvelon绘制组织架构图