760176104 发表于 2018-9-22 15:08:38

oracle 10G 收缩表空间

  如果经常在表上执行DML操作,会造成数据库块中数据分布稀疏,浪费大量空间。同时也会影响全表扫描的性能,因为全表扫描需要访问更多的数据块。从oracle10g开始,表可以通过shrink来重组数据使数据分布更紧密,同时降低HWM释放空闲数据块。
  从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理(ASSM),就可以使用这个特性缩小段,即降低HWM。这里需要强调一点,10g的这个新特性,仅对ASSM表空间有效,否则会报 ORA-10635:Invalid segment or tablespace type。
  比如我工作中使用的系统有个LOG表,记录的日志经常会删除。时间长了查询速度变慢,而且浪费表空间。下面就以这个表为例,记录下收缩表空间的方法。
  1. 查看收缩前表的使用情况
  select sum(bytes)/1024/1024 Mb from user_segments where segment_name='LOG';
  2. 开启行迁移
  alter table LOG enable row movement;
  3. 整理表空间内的碎片
  altertable LOG shrink space compact;
  4. 收缩表空间
  alter table LOG shrink space;
  5.再查看收缩后的表空间使用情况
  select sum(bytes)/1024/1024 Mb from user_segments where segment_name='LOG';
  注意:收缩表空间要在数据库比较空闲的时候做。

页: [1]
查看完整版本: oracle 10G 收缩表空间