全面學習分割槽表及分割槽索引(13)--分隔表分割槽
1、分隔分割槽(Split Partition)
如果你對我們前面講到過的merge partition還有印象的話,那麼學習Split partition也不會遇到什麼障礙,split partition的功能與merge partition功能正好相反:後者是將兩個全區合併成一個,前者則是將一個分割槽分隔成兩個。其用途非常廣泛,比如通常見你發現某個分割槽過大,你就可以通過這種方式將該分割槽分解成多個小分割槽,對我而言最常用到的,當然還是split maxvalue/default的分割槽。
該命令的語法針對不同分割槽會有不同的形式,
l For range partition:alter table tbname split partition ptname at (value) into (partition newpt1 tbs_clause,partition newpt2 tbs_clause);
l For list partition : alter table tbname split partition ptname values (v1,v2...vn) into (partition newpt1 tbs_clause,partition newpt2 tbs_clause);
上述兩項,如果是操作子分割槽,則將partition關鍵字換成subpartition即可。舊分割槽中符合新定義值的記錄會儲存到指定的第一個分割槽中,其它的記錄儲存到第二個分割槽。
例如,range分割槽的示例:
JSSWEB> select partition_name,high_value,tablespace_name from user_tab_partitions
2 where table_name='T_PARTITION_RANGE';
PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
-------------------- ---------------------------------------- --------------------
T_RANGE_P3 30 TBSPART03
T_RANGE_PMAX MAXVALUE TBSPART04
T_RANGE_P1 20 TBSPART02
我們將t_range_p1分割槽分隔到兩個分割槽中,小於10的存放新建分割槽t_range_p1(已非原t_range_p1鳥,只是名稱相同而已),其它資料存入t_range_p2分割槽:
JSSWEB> alter table t_partition_range split partition t_range_p1 at (10) into
2 (partition t_range_p1 tablespace tbspart01,
3 partition t_range_p2 tablespace tbspart02);
表已更改。
JSSWEB> select partition_name,high_value,tablespace_name from user_tab_partitions
2 where table_name='T_PARTITION_RANGE';
PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
-------------------- ---------------------------------------- --------------------
T_RANGE_P3 30 TBSPART03
T_RANGE_PMAX MAXVALUE TBSPART04
T_RANGE_P1 10 TBSPART01
T_RANGE_P2 20 TBSPART02
再來演示一個list分割槽的例子:
JSSWEB> select partition_name,high_value,tablespace_name from user_tab_partitions
2 where table_name='T_PARTITION_LIST';
PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
-------------------- ---------------------------------------- --------------------
T_LIST_P1 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 33 TBSPART01
T_LIST_P2 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, TBSPART02
11, 12, 13, 14, 15, 16, 17, 18, 19, 20
T_LIST_PD default TBSPART04
我們將t_list_p2分割槽中分割槽值是2打頭的儲存到t_list_p3分割槽中,其它值儲存到t_list_p2分割槽:
JSSWEB> alter table t_partition_list split partition t_list_p2 values
2 (20,21,22,23,24,25,26,27,28,29) into
3 (partition t_list_p3 tablespace tbspart03,
4 partition t_list_p2);
表已更改。
JSSWEB> select partition_name,high_value,tablespace_name from user_tab_partitions
2 where table_name='T_PARTITION_LIST';
PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
-------------------- ---------------------------------------- --------------------
T_LIST_P1 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 33 TBSPART01
T_LIST_P2 30, 11, 12, 13, 14, 15, 16, 17, 18, 19 TBSPART02
T_LIST_PD default TBSPART04
T_LIST_P3 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 TBSPART03
提示:
l split partition/subpartition不能用於hash分割槽或hash子分割槽(hash的話,直接用add partition就好了)
l split partition/subpartition視被分隔的分割槽資料量多少,可能需要花費不小的代價,相當於該分割槽資料的全掃描,我們也許可以形容為:full partition scan:),除非:
n Split後的兩個分割槽中,至少有一個是空的,並且非空的那個分割槽的儲存屬性與split前的儲存屬性完全相同
n 如果split的分割槽包含lob欄位,split後非空的那個分割槽中該欄位的儲存屬性也必須與split前的儲存屬性完全相同。
這種情況下的split partition/subpartition也會非常高效,oracle會自動進行優化,此時的分割槽操作類似於add partition。
l 通常情況下,如果在執行split partition/subpartition時,如果沒有指定update indexes子句,都會造成local和global索引的失效。注意,我們說的是通常,如果你split partition/subpartition的是個空分割槽,或者沒有觸發任何資料移動或變化,那麼即使不加update indexes,也不會影響到索引。當然,保險起見,建議你還是執行完之後,查詢一下資料字典,確認一下當前索引的狀態。
=====================================
檢視前面的連載:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-311529/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 全面學習分割槽表及分割槽索引(10)--交換分割槽索引
- 全面學習分割槽表及分割槽索引(9)--刪除表分割槽索引
- 全面學習分割槽表及分割槽索引(11)--合併表分割槽索引
- 全面學習分割槽表及分割槽索引(12)--修改list表分割槽索引
- 全面學習分割槽表及分割槽索引(1)索引
- 全面學習分割槽表及分割槽索引(17)--其它索引分割槽管理操作索引
- 全面學習分割槽表及分割槽索引(8)--增加和收縮表分割槽索引
- 全面學習分割槽表及分割槽索引(16)--增加和刪除索引分割槽索引
- 全面學習分割槽表及分割槽索引(15)--修改表分割槽屬性和模板索引
- 全面學習分割槽表及分割槽索引(7)--怎樣管理索引
- 深入學習Oracle分割槽表及分割槽索引Oracle索引
- 深入學習分割槽表及分割槽索引(1)索引
- 全面認識oracle分割槽表及分割槽索引Oracle索引
- 全面學習分割槽表及分割槽索引(6)--建立range-list組合分割槽索引
- Oracle分割槽表及分割槽索引Oracle索引
- 全面學習分割槽表及分割槽索引(7)--怎樣管理(續)索引
- 學習筆記】分割槽表和分割槽索引——新增表分割槽(二)筆記索引
- 【學習筆記】分割槽表和分割槽索引——管理索引分割槽(四)筆記索引
- 分割槽表及分割槽索引建立示例索引
- 【三思筆記】 全面學習Oracle分割槽表及分割槽索引筆記Oracle索引
- 【學習筆記】分割槽表和分割槽索引——分割槽表的其他管理(三)筆記索引
- 深入學習分割槽表及分割槽索引(5)--建立range-hash組合分割槽(續)索引
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- rebuild分割槽表分割槽索引的方法Rebuild索引
- 全面學習分割槽表及分割槽索引(14)--截斷、移動和重新命名索引
- 如何查詢分割槽表的分割槽及子分割槽
- 【學習筆記】分割槽表和分割槽索引——概念部分(一)筆記索引
- 分割槽表分割槽索引查詢效率探究索引
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- oracle分割槽表和分割槽表exchangeOracle
- Oracle帶區域性分割槽索引的分割槽表刪除舊分割槽新增新分割槽Oracle索引
- 分割槽表、分割槽索引和全域性索引部分總結索引
- INTERVAL分割槽表鎖分割槽操作
- oracle分割槽表和非分割槽表exchangeOracle
- PLSQL根據分割槽表的分割槽名批次truncate分割槽SQL
- 使用split對分割槽表再分割槽
- 關於分割槽表和分割槽索引(About Partitioned Tables and Indexes)索引Index
- oracle分割槽表學習及應用Oracle