全面學習分割槽表及分割槽索引(12)--修改list表分割槽

junsansi發表於2008-05-23

對於已存在的list表分割槽修改包含兩類操作:新增value值和刪除value值,下面分別介紹:

修改list分割槽--Add Values

從標題即可得知,此命令僅應用於list分割槽或list子分割槽,語法也非常簡單:

Alter table tbname modify partition/subpartition ptname add values (v1,v2....vn);

舉個例子:

JSSWEB> select partition_name,high_value from user_tab_partitions

  2  where table_name='T_PARTITION_LIST';

PARTITION_NAME       HIGH_VALUE

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

T_LIST_P1            1, 2, 3, 4, 5, 6, 7, 8, 9, 10

T_LIST_P2            21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 11, 12, 13

                     , 14, 15, 16, 17, 18, 19, 20

T_LIST_PD            default

JSSWEB> alter table t_partition_list modify partition t_list_p1 add values (31,33);

表已更改。

JSSWEB> select partition_name,high_value from user_tab_partitions

  2  where table_name='T_PARTITION_LIST';

PARTITION_NAME       HIGH_VALUE

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

T_LIST_P1            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 31, 33

T_LIST_P2            21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 11, 12, 13

                     , 14, 15, 16, 17, 18, 19, 20

T_LIST_PD            default

唯一的限制是注意要新增的新value值不能存在於當前任何分割槽中,並且當前表也不能存在記錄值為新值的記錄,特別是當你建立了default分割槽的時候,有必要先檢查一下當前表不存在要新增的值,不然命令執行會出錯,例如:

JSSWEB> insert into t_partition_list values (32,'a');

已建立 1 行。

JSSWEB> alter table t_partition_list modify partition t_list_p1 add values (32);

alter table t_partition_list modify partition t_list_p1 add values (32)

            *

第 1 行出現錯誤:

ORA-14324: 所要新增的值已存在於 DEFAULT 分割槽之中

提示,增加新的列表值不會影響到表中原有的記錄,因此不會對索引造成影響。

修改list分割槽--Drop Values

與上類似,也是隻能應用於list分割槽,不過功能相反,該命令是用來刪除指定分割槽的value值,語法如下:

Alter table tbname modify partition/subpartition ptname drop values (v1,v2....vn);

同樣在刪除list分割槽value列值的時候,也必須確認當前分割槽存在指定的value值,但是沒有任何應用該值的記錄,有點兒饒是吧,腦袋多轉幾圈就好了。

舉個例子:

JSSWEB> alter table t_partition_list modify partition t_list_p1 drop values (31);

表已更改。

成功執行了是吧,接著來看

JSSWEB> alter table t_partition_list modify partition t_list_p1 drop values (31);

alter table t_partition_list modify partition t_list_p1 drop values (31)

*

第 1 行出現錯誤:

ORA-14313: 值 31 不在分割槽 T_LIST_P1 中

出錯了吧,這是其中的一種錯誤情形,即前面說的,要確保當前分割槽中存在指定的value值,再往下看

JSSWEB> alter table t_partition_list modify partition t_list_p1 add values (31);

表已更改。

JSSWEB> insert into t_partition_list values (31,'b');

已建立 1 行。

JSSWEB> alter table t_partition_list modify partition t_list_p1 drop values (31);

alter table t_partition_list modify partition t_list_p1 drop values (31)

            *

第 1 行出現錯誤:

ORA-14518: 分割槽包含的某些行對應於已刪除的值

這是另外的一種錯誤情形,即要確保當前分割槽的記錄中,沒有應用了指定value值的記錄。

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

檢視前面的連載:

(11)--合併表分割槽

(10)--交換表分割槽

(9)--刪除表分割槽

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

(7)--怎樣管理

 

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

相關文章