打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
shrink table

首先:这是10G中用来在线回收高水位线的一个命令,9i中无此命令,9i中最好用move。

其次:使用这个命令要enable 表上的row movement,也就是行的rowid会改变,依赖rowid的一些应用可能受影响。使用此语句前要disable rowid相关的trigger

第三,这个语句只用在ASSM表空间下,可以适用于表,索引组织表,溢出段,索引,分区,子分区,lob段,物化视图,物化视图日志。

使用例子:

baal@baal> insert into t select * from dba_objects;

已创建50319行。

已用时间: 00: 00: 01.21
baal@baal> commit;

提交完成。

baal@baal> insert into t select * from t;

已创建50319行。

已用时间: 00: 00: 00.14
baal@baal> /

已创建100638行。

已用时间: 00: 00: 00.50
baal@baal> commit;

提交完成。

baal@baal> analyze table t compute statistics;

表已分析。

已用时间: 00: 00: 08.89
baal@baal> select num_rows,blocks,empty_blocks from user_tables where table_name=’T';

NUM_ROWS     BLOCKS EMPTY_BLOCKS
———- ———- ————
201276       2764           52

已用时间: 00: 00: 00.01
baal@baal> delete from t where rownum<150000;

已删除149999行。

已用时间: 00: 00: 09.25
baal@baal> commit;

提交完成。

已用时间: 00: 00: 00.01
baal@baal> analyze table t compute statistics;

表已分析。

已用时间: 00: 00: 01.89
baal@baal> select num_rows,blocks,empty_blocks from user_tables where table_name=’T';

NUM_ROWS     BLOCKS EMPTY_BLOCKS
———- ———- ————
51277       2764           52

baal@baal> SELECT COUNT (DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)||DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) “Used” FROM T;

Used
———-
703

此时实际的数据只使用了703个块,2764-703=2061,便是高水位线下空闲的块。

baal@baal> alter table t deallocate unused;

表已更改。

baal@baal> analyze table t compute statistics;

表已分析。

baal@baal> SELECT COUNT (DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)||DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) “Used” FROM T;

Used
———-
703

已用时间: 00: 00: 01.48
baal@baal> select num_rows,blocks,empty_blocks from user_tables where table_name=’T';

NUM_ROWS     BLOCKS EMPTY_BLOCKS
———- ———- ————
51277       2764           52

使用alter table t deallocate unused命令对高水位线的回收没有作用。

baal@baal> alter table t shrink space;
alter table t shrink space
*
第 1 行出现错误:
ORA-10636: ROW MOVEMENT is not enabled

baal@baal> alter table t enable row movement;

表已更改。

已用时间: 00: 00: 00.18
baal@baal> alter table t shrink space compact;

表已更改。

baal@baal> select num_rows,blocks,empty_blocks from user_tables where table_name=’T';

NUM_ROWS     BLOCKS EMPTY_BLOCKS
———- ———- ————
51277       2764           52

已用时间: 00: 00: 00.04
baal@baal> SELECT COUNT (DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)||DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) “Used” FROM T;

Used
———-
703

使用alter table t shrink space compact命令并不会回收高水位线只是移动行。是shrink的第一步

baal@baal> alter table t shrink space;

表已更改。

baal@baal> analyze table t compute statistics;

表已分析。

baal@baal> select num_rows,blocks,empty_blocks from user_tables where table_name=’T';

NUM_ROWS     BLOCKS EMPTY_BLOCKS
———- ———- ————
51277        703           25

已用时间: 00: 00: 00.00
baal@baal> SELECT COUNT (DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)||DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) “Used” FROM T;

Used
———-
703

完成之后发现高水位线已经下降。

此时可以取消掉对象上的row movement。

baal@baal> alter table t disable row movement;

表已更改。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Oracle中高水位线(HWM)
DBMS_STATS分析表
Row movement的使用和对系统的影响
深入解析:Row Movement 的原理和性能影响与关联
Oracle 数据坏块的 N 种修复方式
deadlock的一些Sample
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服