alter table move的用途

降低HWM,消除行移植和行链接。

我们可以通过user_segments 或 user_extents 的blocks来查看hwm

SQL> select segment_name,blocks
  from user_segments
  where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                    16

在usr_extents中查找

SQL> select segment_name,blocks
  from user_extents where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                     8
SMTDZ                     8

SQL> select count(*) from smtdz;

  COUNT(*)
----------
      1015

SQL> insert into smtdz select * from smtdz;

已创建1015行。

SQL> commit;

提交完成。

SQL> select count(*) from smtdz;

  COUNT(*)
----------
      2030

SQL> select segment_name,blocks
  from user_segmentS
  where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                    24

SQL> select segment_name,blocks from user_extents where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                     8
SMTDZ                     8
SMTDZ                     8

可以看到当我们insert into smtdz 一批数据后其blocks增加了,我们再对smtdz进行delete下

SQL> delete from smtdz where rownum<1001;

已删除1000行。

SQL> commit;

提交完成。

SQL> select count(*) from smtdz;

  COUNT(*)
----------
      1030

未对表smtdz进行分析analyze前

SQL> select segment_name,blocks
  from user_segments
  where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                    24

对表smtdz进行分析

SQL> exec dbms_stats.gather_table_stats(ownname=>'IC',tabname=>'SMTDZ');

PL/SQL 过程已成功完成。

SQL> select segment_name,blocks
  from user_segments
  where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                    24

可见分析表只是修改了user_tables里的num_rows值,对hwm并没有影响

SQL> alter table smtdz move;

表已更改。

SQL> select segment_name,blocks
  from user_segments
  where segment_name='SMTDZ';

SEGMENT_NAME         BLOCKS
---------------- ----------
SMTDZ                    16

从这里可以看到表smtdz的hwm发生了变化,现在只有16个blocks了

 

我们可以用下面的办法来最方便的进行重组,消除row migration:

SQL> alter table t add t1 date default sysdate;
Table altered.

SQL> c/t1/t2
1* alter table t add t2 date default sysdate
SQL> /
Table altered.

SQL> c/t2/t3
1* alter table t add t3 date default sysdate
SQL> /
Table altered.

SQL> analyze table t compute statistics;
Table analyzed.

SQL> select table_name,num_rows,CHAIN_CNT from user_tables where table_name='T';
TABLE_NAME  NUM_ROWS    CHAIN_CNT
-------------  --------------- ---------- 
                  41616              3908

SQL> alter table t move ;
Table altered.

SQL> analyze table t compute statistics;
Table analyzed.

SQL> select table_name,num_rows,CHAIN_CNT from user_tables where table_name='T';
TABLE_NAME NUM_ROWS      CHAIN_CNT
-------------  ---------------- ------------
                  41616                0




如果索引和表放在同一个表空间请大家慎用alter table move,它会让index变为UNUSABLE。


操作过程:


SQL> alter table TEST_COURSE MOVE;
已更改表格.
SQL> set time on;
09:28:48 SQL> alter table TEST_flow_dt move;
已更改表格.
09:30:15 SQL> alter table TEST_transfer move;
已更改表格.
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes  where table_name IN ('TEST_FLOW_DT','TEST_COURSE','TEST_TRANSFER');
                                                                                                                                                                
INDEX_NAME                    INDEX_TYPE                  TABLESPACE_NAME                TABLE_TYPE  STATUS                                                    
------------------------------ --------------------------- ------------------------------ ----------- --------                                                  
INX_TEST_COURSE_02          NORMAL                      TEST                            TABLE      UNUSABLE                                                  
INX_TEST_COURSE_01          NORMAL                      TEST                            TABLE      UNUSABLE                                                  
PK_TEST_COURSE              NORMAL                      TEST                            TABLE      UNUSABLE                                                  
INX_TEST_COURSE_03          NORMAL                      TEST                            TABLE      UNUSABLE                                                  
INX_TEST_FLOW_DT_04        NORMAL                      TEST                            TABLE      UNUSABLE                                                  
INX_TEST_FLOW_DT_01        NORMAL                      TEST                            TABLE      UNUSABLE                                                  
INX_TEST_FLOW_DT_07        FUNCTION-BASED NORMAL      TEST                            TABLE      UNUSABLE                                                  
INX_TEST_FLOW_DT_06        FUNCTION-BASED NORMAL      TEST                            TABLE      UNUSABLE                                                  
INX_TEST_FLOW_DT_05        NORMAL                      TEST                            TABLE      UNUSABLE                                                  
IND_TEST_FLOW_DT_03        NORMAL                      TEST                            TABLE      UNUSABLE                                                  
IND_TEST_FLOW_DT_02        NORMAL                      TEST                            TABLE      UNUSABLE                                                  
PK_TEST_FLOW_DT            NORMAL                      TEST                            TABLE      UNUSABLE                                                    
IND_TRAN_ORG                  NORMAL                      TEST                            TABLE      UNUSABLE                                                  
IND_TEST_TRANSFER02          NORMAL                      TEST                            TABLE      UNUSABLE                                                  
PK_TEST_TRANSFE              NORMAL                      TEST                            TABLE      UNUSABLE                                                  
INX_TEST_TRANSFER_01        NORMAL                      TEST                            TABLE      UNUSABLE    


 出现这种情况必须重建索引                      


alter index INX_TEST_COURSE_02  rebuild;
alter index INX_TEST_COURSE_01  rebuild;
alter index PK_TEST_COURSE      rebuild;
alter index INX_TEST_COURSE_03  rebuild;
alter index INX_TEST_FLOW_DT_04  rebuild;
alter index INX_TEST_FLOW_DT_01  rebuild;
alter index INX_TEST_FLOW_DT_07  rebuild;
alter index INX_TEST_FLOW_DT_06  rebuild;
alter index INX_TEST_FLOW_DT_05  rebuild;
alter index IND_TEST_FLOW_DT_03  rebuild;
alter index IND_TEST_FLOW_DT_02  rebuild;
alter index PK_TEST_FLOW_DT      rebuild;
alter index IND_TRAN_ORG        rebuild;
alter index IND_TEST_TRANSFER02  rebuild;
alter index PK_TEST_TRANSFE      rebuild;
alter index INX_TEST_TRANSFER_01 rebuild;


本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2013-02/78961.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值