全面學習分割槽表及分割槽索引(8)--增加和收縮表分割槽

junsansi發表於2008-05-16

1、增加表分割槽(add partition)

增加表分割槽適應於所有的分割槽形式,其語法是alter table tbname add partition .....

但是,需要注意對於像list,range這種存在範圍值的分割槽,所要增加的分割槽值必須要大於當前分割槽中的最大值(如果當前存在maxvalue或default的分割槽,add partition會報錯,這種情況只能使用split,後面會講到),hash分割槽則無此限制。

例如:

JSSWEB> create table t_partition_range (id number,name varchar2(50))

  2   partition by range(id)(

  3   partition t_range_p1 values less than (10) tablespace tbspart01,

  4   partition t_range_p2 values less than (20) tablespace tbspart02,

  5   partition t_range_p3 values less than (30) tablespace tbspart03

  6   );

表已建立。

JSSWEB> alter table t_partition_range

  2  add partition t_range_p4 values less than(40);

表已更改。

Hash和list的語法與上類似,這裡不再舉例。

注意:

1、對於hash分割槽,當你執行add partition操作的時候,oracle會自動選擇一個分割槽,並重新分配部分記錄到新建的分割槽,這也意味著有可能帶來一些IO操作。

2、執行alter table時未指定update indexes子句:

如果是range/list分割槽,其local索引和global索引不會受影響;

如果是hash分割槽,新加分割槽及有資料移動的分割槽的local索引和glocal索引會被置為unuseable,需要重新編譯。

3、複合分割槽完全適用上述所述規則。

2、收縮表分割槽(coalesce partitions)

Coalesce partition是個很有意思的分割槽功能,僅能被應用於hash分割槽或複合分割槽的hash子分割槽,執行之後,會自動收縮當前的表分割槽,比如某表當前有5個hash分割槽,執行alter table tbname coalesce partitions後就變成4個,再執行一次就變成3個,再執行一次就變2個,再執行一次就...........就報錯了:),對於已分割槽的表至少要有一個分割槽存在的嘛!

例如:

JSSWEB> select table_name,partition_name from user_tab_partitions

  2   where table_name='T_PARTITION_HASH';

TABLE_NAME                     PARTITION_NAME

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

T_PARTITION_HASH               T_HASH_P2

T_PARTITION_HASH               T_HASH_P3

T_PARTITION_HASH               T_HASH_P4

T_PARTITION_HASH               T_HASH_P5

T_PARTITION_HASH               T_HASH_P1

JSSWEB> alter table t_partition_hash coalesce partition;

表已更改。

JSSWEB> select table_name,partition_name from user_tab_partitions

  2   where table_name='T_PARTITION_HASH';

TABLE_NAME                     PARTITION_NAME

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

T_PARTITION_HASH               T_HASH_P2

T_PARTITION_HASH               T_HASH_P3

T_PARTITION_HASH               T_HASH_P4

T_PARTITION_HASH               T_HASH_P1

注意,收縮的只是分割槽,並不會影響到資料,但是視被收縮分割槽中資料的多少,收縮表分割槽也會涉及到IO操作。

另外如果你在執行該語句時沒有指定update indexes子句,收縮過程中有資料改動的分割槽其local索引和glocal索引都會失效,需要重新編譯。

檢視前面的連載:

(7)--怎樣管理

(6)--建立range-list組合分割槽

(5)--建立range-hash組合分割槽(1)

(4)--建立list分割槽

(3)--建立hash分割槽

(2)--建立range分割槽

(1)--前言

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

相關文章