Oracle表占用空间收缩 - 实战

本文介绍了在Oracle数据库中如何利用shrink space语句进行表空间收缩,详细讲解了shrink操作的过程、影响以及注意事项,并提供了实际操作示例,帮助读者理解如何有效管理数据库空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

背景

思路 - 利用shrink space语句

段收缩 - segment shrink

shrink space语句

shink语句有哪些?

shrink space语句的两个选项

shrink操作示例

shrink操作的相关影响

shrink操作是否会影响CRUD操作?

shrink操作后是否需要创建索引?

shrink操作是否需要分配额外的磁盘空间?

shrink操作前必须开启行移动?

shrink操作还有什么限制?

shrink操作会导致某些依赖的数据库对象变成无效的?

解决

准备工作

查看表空间占用大小

查看表占用空间

查看该表的水位线情况

开始缩容

分析表

执行缩容

对比shrink操作前后的结果

再次分析表

比对shrink前后差异

附录

查询碎片率高的表

参考


背景

生产环境Oracle单表数据量超过200W左右,再将其数据全部删除后,发现占用的磁盘空间并没有自动回收。

特别说明:该表中有CLOB列。(TO_BE_PUSHED_MESSAGE.MESSAGE_CONETENT)。

理论情况是这样:

  • 随着不断的insert会导致高水位线不断的右移,而记录的delete并不会导致高水位线左移
  • delete记录后,高水位线(HWM,high water mark)左侧的空间依然可以使用,但是其会碎片化,导致空间空闲,但从操作系统层面来看,依然是空间占用
  • 如果有FULL SCAN全表扫描的话,其花费的时间不会因为记录的减少而减小,因为空的块也会被扫描

注意:如果是删除全表数据,可以考虑使用truncate语句,这样就可以自动收缩空间。

思路 - 利用shrink space语句

利用Oracle提供的shrink space语句实现碎片整理及空间释放。

段收缩 - segment shr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甘蓝聊Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值