暂无图片
表空间有个数据文件1,里面有个对象a,现在shrink这个表空间,a会不会跑到数据文件2上,还是仍然停留在1上?
我来答
分享
Bigbig
2021-09-18
表空间有个数据文件1,里面有个对象a,现在shrink这个表空间,a会不会跑到数据文件2上,还是仍然停留在1上?

表空间有个数据文件1,里面有个对象a,现在shrink这个表空间,a会不会跑到数据文件2上,还是仍然停留在1上?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
三笠丶
暂无图片

默认只移动行数据!

oracle以block为单位,进行了block间的数据copy.那么shrink后,部分行数据的rowid发生了变化,同时,部分行数据的物理存储的顺序也发生了变化,而table所位于的block的区域却没有变化,这就说明,shrink只移动了table其中一部分的行数据,来完成释放空间,而且,这个过程是在table当前所使用的block中完成的。

使用shrink的前提条件

  • 1、表所在的表空间必须使用ASSM(自动段空间管理)
  • 2、在收缩表上必须启用row movement选项
select row_movement from dba_tables where table_name='' and owner=''; alter table emp enable row movement;

操作步骤:

  • 1.打开行移动功能:
alter table emp enable row movement;
  • 2.压缩阶段,将数据行紧密的插入到数据块里面。在这个阶段,其他用户可以对收缩的表进行DML操作
    进行行移动:
alter table emp shrink space compact;

释放阶段,降低HWM,这个阶段会对表进行排他锁。用户不能对表进行DML操作。

  • 3.移动高水位,将无用的区进行释放,更新数据字典:
alter table emp shrnk space;

(进行 shrnk 操作后,索引不会失效,这是有别与 move 操作的)

  • 4.操作完成后,一定要将行移动功能关闭掉:
alter table emp disable row movement;

使用shrink的注意事项

  • 1) 对簇、簇表、以及任何含有long列的对象无法使用shrink
  • 2) LOB段不支持shrink,即使对表shrink时指定了cascade语句
  • 3) 对有函数索引的表不支持
  • 4) 即使指定cascade语句,也不会shrink mapping表(映射表),索引组织表的over flow segment.
  • 5) 如果一个是on commit物化视图的主表,那么我们是无法shrink这张表的。如果shrink rowid的物化视图,在shrink之后必须rebuild。
  • 6) 不支持compressed 表
暂无图片 评论
暂无图片 有用 0
暂无图片
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏