千家信息网

oracle 表收缩

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,当使用delete表数据后,空间无法释放,可以使用表收缩释放表空间;注意:当delete表大量数据的时候要注意undo,可以使用:alter table emp nologging; 让其不生产日志一
千家信息网最后更新 2026年10月31日oracle 表收缩

当使用delete表数据后,空间无法释放,可以使用表收缩释放表空间;

注意:当delete表大量数据的时候要注意undo,可以使用:alter table emp nologging; 让其不生产日志


一、表的增长方式

当表被创建后,随着记录的不断插入,组成表的区间会被填满,如果启用了自动扩展,则当区间填满后,会分配新的区间。假定高水

位线随着记录的增加从最左端往右端来移动,当到底部区间的尾端时,则新的区间将会被分配。

二、表可收缩的原理

随着记录的增加高水位线不断的右移,记录的删除不会导致高水位线往回(左)移动

删除记录后的空闲空间(高水位线左侧)尽管可以使用,但其稀疏性导致空间空闲

注:完整的表扫描所耗费的时间不会因为记录的减少(删除)而减少


三、使用 alter table tbname shrink space 来收缩表段

1. 实现原理

实质上构造一个新表(在内部表现为一系列的DML操作,即将副本插入新位置,删除原来位置的记录)

靠近末尾处(右端)数据块中的记录往开始处(左端)的空闲空间处移动(DML操作),不会引起DML触发器

当所有可能的移动被完成,高水位线将会往左端移动(DDL操作)

新的高水位线右边的空闲空间被释放(DDL操作)

2. 实现前提条件

必须启用行记录转移(enable row movement)

仅仅适用于堆表,且位于自动段空间管理的表空间(堆表包括:标准表,分区表,物化视图容器,物化视图日志表)

3. 不能实现收缩的表

群集表

具有LONG类型列的表

LOB段(尽管表本身可以被缩小),注,10gR2以后版本支持对LOB段的收缩

具有基于提交的物化视图的表(因为禁用了触发器)

具有rowid物化视图的表(因为rowid发生了变化)

IOT映射表IOT溢出段

索引基于函数的表

未启用行记录转移的堆表

4. 段收缩的优点

提高缓存利用率,提高OLTP的性能

减少磁盘I/O,提高访问速度,节省磁盘空间

段收缩是在线的,索引在段收缩期间维护,不要求额外的磁盘空间

5. 两个选项

cascade: 缩小表及其索引,并移动高水位线,释放空间

compact: 仅仅是缩小表和索引,并不移动高水位线,不释放空间

alter table tbname shrink space 相当于带cascade参数

实战练习:

1、首先删除表里的数据

SQL> alter table FEE_COLLECT_TMP nologging; ----设置表不产生undo

SQL> delete from FEE_COLLECT_TMP where CUTOFFDAY='20170501';

SQL> commit;

2、收缩表

SQL> alter table FEE_COLLECT_TMP enable row movement; -->开启row movement


SQL> alter table FEE_COLLECT_TMP shrink space; -->shrink成功


3、语法总结:

ALTER TABLE  ENABLE ROW MOVEMENT   -->前提条件                                                                                                                                          ALTER TABLE  SHRINK SPACE [  | COMPACT | CASCADE ];                                                                                                                                 ALTER TABLE  SHRINK SPACE COMPCAT;  -->缩小表和索引,不移动高水位线,不释放空间                                                                                                           ALTER TABLE  SHRINK SPACE;     -->收缩表,降低高水位线;                                                                                                                                   ALTER TABLE  SHRINK SPACE CASCADE; -->收缩表,降低高水位线,并且相关索引也要收缩一下                                                                                                      ALTER TABLE  MODIFY LOB (lob_column) (SHRINK SPACE);  -->收缩LOB段                                                                                                                        ALTER INDEX IDXNAME SHRINK SPACE;     -->索引段的收缩,同表段


#################################################################


1、收缩普通表,批量脚本

select'alter table '||table_name||' enable row movement;'||chr(10)||'alter table '||table_name||' shrink space;'||chr(10)from user_tables;

select'alter index '||index_name||' shrink space;'||chr(10)from user_indexes;

收缩 空间 水位 水位线 移动 索引 区间 数据 空闲 视图 磁盘 不断 位置 前提 原理 日志 条件 触发器 分配 普通 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与科技 互联网科技公司简介 广州淘业互联网络科技 九亚互联网科技 南京欣网互联网科技 苏州互联网科技贷款公司 智慧科技互联网 兼蜜互联网科技 科技类的互联网平台 互联网经济与金融科技 互联网5g黑科技有哪些 燊美集互联网科技有限公司 工业互联网展湾科技股份有限公司 合肥互联网科技公司公章图片 山东星卡互联网科技有限公司官网 互联网科技平台产品运营 科技信息时代互联网发展 米泉互联网科技专业怎么样 华人运通互联网科技公司 互联网 科技节活动 微视频大赛 广州大一互联网络科技有限公司 互联网电商科技 深圳期待互联网科技 互联网 科技服务平台 四川互联网展示科技馆设计 互联网科技创新创业项目 互联网科技创业计划的风险分析 北京瑞云互联网科技有限公司 宁波允成互联网科技有限公司 山东亿川互联网科技有限责任公司
0