服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Oracle - oracle删除数据但表空间占用率没有减小的情况

oracle删除数据但表空间占用率没有减小的情况

2023-02-16 12:25咕噜大仙 Oracle

这篇文章主要介绍了oracle删除数据但表空间占用率没有减小的情况,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

oracle删除数据但表空间占用率没有减小

使用delete删除数据表空间使用率并没有减少;

如果只保留少数数据可以使用这个方法:

先将要保留的数据insert到另外一张表中,然后执行sql:

?
1
truncate table tablename DROP STORAGE;

解释: 直接删除表,并且释放存储空间。truncate的意思是清空表数据, “DROP STORAGE”是释放存储空间。

然后在将备份数据还原;

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属性:

?
1
2
3
4
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,并且回收相应的索引。

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

?
1
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表空间也会暴增。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_38256982/article/details/119871838

延伸 · 阅读

精彩推荐
  • Oracleoracle中读写blob字段的问题解析

    oracle中读写blob字段的问题解析

    这篇文章以程序实例说明通过JDBC操纵Oracle数据库LOB类型字段的几种情况 ...

    oracle教程网2822019-12-01
  • OracleOracle 创建主键自增表示例代码

    Oracle 创建主键自增表示例代码

    我们经常在设计数据库的时候用一个系统自动分配的ID来作为我们的主键,但是在Oracle没有自增主键的设置,我们可以通过这篇文章介绍的方法实现,有需要的...

    pursuer.chen2932020-01-02
  • OracleOracle使用like查询时对下划线的处理方法

    Oracle使用like查询时对下划线的处理方法

    这篇文章主要介绍了Oracle使用like查询时对下划线的处理方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以...

    过往云烟4452021-04-24
  • OracleOracle外键不加索引引起死锁示例

    Oracle外键不加索引引起死锁示例

    这篇文章主要介绍了Oracle外键不加索引引起死锁的情况及解决,需要的朋友可以参考下 ...

    Oracle教程网3612019-12-09
  • Oracleoracle11g卸载完整图文教程

    oracle11g卸载完整图文教程

    这篇文章主要为大家详细介绍了oracle11g卸载完整图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    罗德拉沃尔11712021-11-12
  • Oracle解决线上Oracle连接耗时过长的问题现象

    解决线上Oracle连接耗时过长的问题现象

    这篇文章主要介绍了记一次线上Oracle连接耗时过长的问题,本文通过问题定位分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需...

    codest9922022-01-17
  • OracleOracle 11g简体中文版安装图文教程

    Oracle 11g简体中文版安装图文教程

    这篇文章主要以图文结合的方式为大家介绍了Oracle 11g简体中文版的安装过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    starzy4702020-01-12
  • Oracle如何查询占CPU高的oracle进程

    如何查询占CPU高的oracle进程

    oracle占用cpu过高怎么处理,本文将介绍有关oracle进程CPU占用率过高的问题,需要了解跟多的朋友可以参考下 ...

    oracle教程网5172019-11-14