alter table XXX shrink space compact/cascade详解

部署运行你感兴趣的模型镜像
该语句允许你手动地收缩表、索引表、超负荷的段索引、分区、子分区、LOB 段、物化视图、物化视图日志


文件等的占用空间。该语句只是对ASM的表空间适用。默认地,该操作或使oracle立即压缩段、调整HWM,释放


压缩的空间。
  压缩段需要 row movement,当使用该语句前,必须保证row movement是允许的。另外,如果你的应用有任何 


基于rowid的索引,你应该先禁用他们。
  Note:
Do not attempt to enable row movement for an index-organized table before specifying the 


shrink_clause. The ROWID of an index-organized table is its primary key, which never changes. 


Therefore, row movement is neither relevant nor valid for such tables.


两个参数 compact 和 cascade 详解
   
  (1)campact 参数。如果使用了该参数,oracle会清除段中的碎片并压缩表中的行。数据库不会理解调整


HWM也不会立即释放这些空间。你必须另外再执行一次alter table ....shrink space语句来完成该操作。这个


语句在你在用两个短的操作而不是一个长的操作来完成压缩表所占的空间的情况下是有用的。


   对于索引或者索引组织的表使用ALTER [INDEX | TABLE] ... SHRINK SPACE COMPACT和使用ALTER [INDEX | 


TABLE ... COALESCE是等效的 shrink语句可以级联压缩。相对于 coalesce操作压缩尺度更大,也更能提高性


能。如果你不想释放无用的空间,你可以使用coalesce语句。
  
  (2)cascade参数。如果使用了该参数,oracle在该表的独立的对象上(包括索引组织表的索引)执行同样


的压缩操作。  


    shrink语句注意事项:
   (1)不能和其他alter table语句合并到一起,不能将该语句用于簇、簇表和任何有long类型列的表。
   (2)段压缩不支持有函数索引、域索引和bitmap join index的表
   (3)该语句不会压缩映射表盒索引组织表,即使你使用cascade字句
   (4)不能在压缩表上使用该语句 
   (5)不能压缩on commit的物化视图的主表。压缩操作之后基于rowid的物化视图必须被重建。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

Oracle 数据库中,`ALTER TABLE ... SHRINK SPACE COMPACT` 是用于执行表段收缩操作的一种命令形式。该命令的主要作用是在不释放表段所占用的空间给表空间的情况下,重新组织表中的数据块,从而压缩数据并降低高水位线(HWM),提升存储效率和查询性能[^1]。 ### 使用 `SHRINK SPACE COMPACT` #### 前提条件 - 表所在的表空间必须是支持自动段空间管理(ASSM)的。 - 表必须启用行移动功能(Row Movement)。这是因为收缩操作会重新排列数据块中的行,可能需要将某些行移动到其他位置[^2]。 #### 操作步骤 1. **启用行移动** 在执行 `SHRINK` 操作之前,需要先启用表的行移动功能: ```sql ALTER TABLE table_name ENABLE ROW MOVEMENT; ``` 2. **执行收缩操作** 使用 `SHRINK SPACE COMPACT` 命令进行收缩操作: ```sql ALTER TABLE table_name SHRINK SPACE COMPACT; ``` 该命令会重新整理表的数据块,但不会立即释放未使用的空间给表空间。这意味着后续的 `INSERT` 或 `UPDATE` 操作可以继续使用这些已压缩但尚未释放的空间[^1]。 3. **释放空间(可选)** 如果希望释放压缩后的空间给表空间,则可以在收缩操作中省略 `COMPACT` 参数: ```sql ALTER TABLE table_name SHRINK SPACE; ``` 4. **级联收缩(可选)** 如果需要同时收缩与该表相关的索引段,则可以添加 `CASCADE` 参数: ```sql ALTER TABLE table_name SHRINK SPACE COMPACT CASCADE; ``` #### 示例代码 以下是一个完整的示例,包括启用行移动、执行收缩以及分析表的操作: ```sql -- 启用行移动 ALTER TABLE test_shrink ENABLE ROW MOVEMENT; -- 执行紧凑型收缩 ALTER TABLE test_shrink SHRINK SPACE COMPACT; -- 分析表以更新统计信息 EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => NULL, tabname => 'TEST_SHRINK', cascade => TRUE); ``` #### 注意事项 - 收缩操作期间会对表加锁,因此应避免在业务高峰期执行此类操作。 - `SHRINK` 操作仅适用于堆组织表,并且要求表段位于 ASSM 管理的表空间中[^1]。 - 收缩后建议更新统计信息,以便优化器能够生成更高效的执行计划[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值