全面學習分割槽表及分割槽索引(16)--增加和刪除索引分割槽

junsansi發表於2008-05-30

從本節開始,介紹索引分割槽的管理操作~~

1、增加索引分割槽(Adding Index Partitions)

從語法上來講,增加索引分割槽與增加表分割槽沒有什麼實際性差別,將table換成index即可:

Alter index idxname add partition ptname tbs_clause;

需要注意一點add partition只能用於hash的global索引(如果你想為range型別的索引增加分割槽,不要用add,split也許能幫你實際你的需求),並且add partition無法新增local索引分割槽,因為local分割槽是由索引所在基表來維護的。

下面舉個操作的例子,還記的我們前面演示建立hash分割槽的時候建立的索引嗎,這裡就以它為例吧:

JSSWEB> select partition_name,tablespace_name from user_ind_partitions

  2  where index_name='IDX_PART_HASH_ID';

PARTITION_NAME                 TABLESPACE_NAME

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

SYS_P113                       TBSPART01

SYS_P114                       TBSPART02

SYS_P115                       TBSPART03

JSSWEB> alter index idx_part_hash_id add partition i_hash_id_p4 tablespace tbspart04;

索引已更改。

JSSWEB> select partition_name,tablespace_name from user_ind_partitions

  2  where index_name='IDX_PART_HASH_ID';

PARTITION_NAME                 TABLESPACE_NAME

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

I_HASH_ID_P4                   TBSPART04

SYS_P113                       TBSPART01

SYS_P114                       TBSPART02

SYS_P115                       TBSPART03

看看,就是這麼簡單。

2、刪除索引分割槽(Dropping Index Partitions)

Drop partition只能操作global索引的range分割槽,語法也很簡單:

Alter index idxname drop partition ptname;

看起來很簡單對吧,但是,需要注意,索引必須擁有一個maxvalue的分割槽,該分割槽無法刪除。

另外,如果刪除的索引分割槽中包含資料,分割槽被刪除後,會造成相鄰的higher分割槽失效,需要手工編譯!這個其實很容易理解,索引中資料都是經過排序的,我們drop partition刪除的只是分割槽,但其對應的索引資料還需要有地兒存在行啊(不然索引啟不就不準確了),於是就只好儲存到比它更高區間值的索引區分裡去了,那個分割槽莫名其妙多了資料,自然狀態就為不可用了。

舉個例子:

JSSWEB> select partition_name,high_value,tablespace_name,status from user_ind_partitions

  2  where index_name='IDX_PART_RANGE_ID';

PARTITION_NAME       HIGH_VALUE      TABLESPACE_NAME      STATUS

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

I_RANGE_P1           10              TBSPART01            USABLE

I_RANGE_P2           40              TBSPART02            USABLE

I_RANGE_PMAX         MAXVALUE        TBSPART03            USABLE

向表中插入幾條記錄:

JSSWEB> insert into t_partition_range values (8,'a');

已建立 1 行。

JSSWEB> insert into t_partition_range values (9,'b');

已建立 1 行。

JSSWEB> commit;

提交完成。

執行刪除操作

JSSWEB> alter index idx_part_range_id drop partition i_range_p1;

索引已更改。

JSSWEB> select partition_name,high_value,tablespace_name,status from user_ind_partitions

  2  where index_name='IDX_PART_RANGE_ID';

PARTITION_NAME       HIGH_VALUE      TABLESPACE_NAME      STATUS

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

I_RANGE_P2           40              TBSPART02            UNUSABLE

I_RANGE_PMAX         MAXVALUE        TBSPART03            USABLE

於是,i_range_p2分割槽就unusable了,繼續往下看吧,後面要講如何重編譯索引分割槽了。

檢視前面的連載:

(15)--修改表分割槽屬性和模板

(14)--截斷、移動和重新命名

(13)--分隔表分割槽

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

(11)--合併表分割槽

(10)--交換表分割槽

(9)--刪除表分割槽

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

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

相關文章