全面學習分割槽表及分割槽索引(14)--截斷、移動和重新命名

junsansi發表於2008-05-28

1、截斷表分割槽(Truncate Partition)

Truncate partition就像truncate table一樣,直接從頭部截斷資料,用來刪除資料那是效率超高無比。但是如果該表有外來鍵引用的話,ddl的truncate就不好使了,這時候你只能要麼使用delete,要麼先disable掉外來鍵關聯再truncate了。同樣,在不指定update indexes子句的情況下,truncate partition也會造成分割槽所在表的global索引失效。

語法非常簡單:alter table tbname truncate partition/subpartition ptname;

例如:

JSSWEB> select *from t_partition_range partition(t_range_p1);

        ID NAME

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

        11 a

        12 b

        13 c

JSSWEB> alter table t_partition_range truncate partition t_range_p1;

表被截斷。

JSSWEB> select *from t_partition_range partition(t_range_p1);

未選定行

 

2、移動表分割槽(Move Partition)

Move partition與modify partition的功能相似,但又比之更加強勁,比如可以修改分割槽所在表空間等等,與move table的操作很類似,某些時間也非常有用,比如降低行遷移。語法很簡單:

Alter table tbname move partition/subpartition ptname .....;

例如:

JSSWEB> select partition_name,tablespace_name from user_tab_partitions

  2  where table_name='T_PARTITION_RANGE';

PARTITION_NAME       TABLESPACE_NAME

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

T_RANGE_P3           TBSPART03

T_RANGE_PMAX         TBSPART04

T_RANGE_P1           WEBTBS

JSSWEB> alter table t_partition_range move partition t_range_p1 tablespace tbspart02;

表已更改。

JSSWEB> select partition_name,tablespace_name from user_tab_partitions

  2  where table_name='T_PARTITION_RANGE';

PARTITION_NAME       TABLESPACE_NAME

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

T_RANGE_P3           TBSPART03

T_RANGE_PMAX         TBSPART04

T_RANGE_P1           TBSPART02

提示:move partition/subpartiton時會鎖表,並且move partition/subpartiton視被移動分割槽中資料量的多少,會帶來相應的IO操作。同時還需要注意,如果在move partition/subpartiton時沒有指定update indexes子句,則被移動分割槽所在的local索引以及全域性索引都會失效,需要手工rebuilding。

3、重新命名錶分割槽(Rename Partition)

就是改名,跟改表名、改列名的操作目的是類似的,語法也很簡單:

Alter table tbname rename partition ptname to newptname;

舉個例子:

JSSWEB> select partition_name from user_tab_partitions where table_name='T_PARTITION_RANGE';

PARTITION_NAME

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

T_RANGE_P3

T_RANGE_PMAX

T_RANGE_PNEW

JSSWEB> alter table t_partition_range rename partition t_range_pnew to t_range_p1;

表已更改。

JSSWEB> select partition_name from user_tab_partitions where table_name='T_PARTITION_RANGE';

PARTITION_NAME

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

T_RANGE_P3

T_RANGE_PMAX

T_RANGE_P1

=====================================

檢視前面的連載:

(13)--分隔表分割槽

(12)--修改list表分割槽

(11)--合併表分割槽

(10)--交換表分割槽

(9)--刪除表分割槽

(8)--增加和收縮表分割槽

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-321791/,如需轉載,請註明出處,否則將追究法律責任。

相關文章