首页 > 代码库 > 表碎片

表碎片

SQL> SELECT TABLE_NAME,  (BLOCKS * 8192 / 1024 / 1024) -  (NUM_ROWS * AVG_ROW_LEN / 1024 / 1024) "Data lower than HWM in MB" 

  FROM USER_TABLES  WHERE table_name = ‘T1‘; 

TABLE_NAME           Data lower than HWM in MB 

-------------------- ------------------------- 

T1                                  33.5791626 

 

整理表碎片

10g之前

两种方法:

  • 导出表,删除表,再导入表
  • alter table move

一般选择第二种,需要重建索引。

10g后

从 10g 开始,提供一个 shrink 命令,需要表空间是基于自动段管理的。

可以分成两步操作:

-- 整理表,不影响DML操作  SQL> alter table TABLE_NAME shrink space compact;   
-- 重置高水位,此时不能有DML操作 SQL> alter table TABLE_NAME shrink space;

也可以一步到位:

-- 整理表,并重置高水位  SQL> alter table TABLE_NAME shrink space;  

shrink 的优势:

  • 不需要重建索引。
  • 可以在线操作。
  • 不需要空闲空间,alter move需要跟当前表一样大小的空闲空间。