建立好錶分割槽後如何管理表分割槽呢?
一、增加表分割槽(add partition)
只用於所有表分割槽,語法:alter table tabname add partition partitionname ...
對於list range這樣存在範圍的表分割槽,所增加的表分割槽一定要大於當前分割槽中的最大值,hash分割槽無此限制。
注意:1、對於hash分割槽,當執行add parition的時候,oracle會自動選擇乙個分割槽,並重新分配記錄到新建的分割槽,這就意味者有一定的io操作。
2、alter table時,未指定update indexes子句:
如果是rang、list分割槽,其local 索引和global索引不會受到影響,如果是hash分割槽,新加分割槽及所有移動的分割槽的local索引和global索引會被置為unuseable,需要重新編譯。
二、收縮表分割槽(coalesce partition)
僅適用於hash分割槽或者復合分割槽中的hash分割槽,執行之後會自動收縮當前的表分割槽,對於一分割槽的表分割槽,最少要有乙個分割槽存在。
語法:alter table tabname coalesce partition;
注意:收縮只收縮表分割槽,並不影響資料,但是被收縮的分割槽中的資料多少,收縮表分割槽也會涉及到io操作。如果執行該操作的時候沒有指定update indexes子句,收縮過程中有資料改動的分割槽其loacl索引和global索引都會失效,需要重新編譯。
三、刪除表分割槽(drop partition)
刪除分割槽:alter table tabname drop partition parname;
刪除子分割槽:alter table tabname drop subpartition parname;
hash分割槽和hash子分割槽無此操作,hash分割槽如果想刪掉分割槽可以使用上邊的收縮分割槽。
注意:刪除分割槽的時候,其分割槽中的資料也會一同刪除,如果只想刪除分割槽,不想刪資料,可以使用merge partition。同樣,如果沒有指定update indexes,也會導致global索引失效,刪除分割槽時索引一同被刪除,其他分割槽的local分割槽是不會受到影響的。
四、交換表分割槽(exchange partitions)
只是一種方式,讓你的表與表分割槽與分割槽之間遷移資料,並不是將表轉換成分區或者非分割槽的形式,只是資料遷移,可以理解為更改資料字典,因此效率高,不涉及io,適用於所有分割槽,可以將資料從分割槽表遷移到費分割槽表中,也可以反過來。
語法:alter table tabname1 exchange partition/subpartition ptname with tablename2;
注意:涉及交換的兩個表的表結構必須一致,除非加with validation子句
如果是從非分割槽表向分割槽表做交換,非分割槽表中的資料必須符合分割槽表中指定分割槽的規則,除非附加without validation 子句。
如果從分割槽表向分割槽表做交換,被交換的分割槽的資料必須符合分割槽規則,除非附加without validation 子句;
global 索引或涉及到資料改動了的global 索引分割槽會被置為unusable,除非附加update indexes 子句;
一旦附加了without validation 子句,則表示不再驗證資料有效性,因此指定該子句時務必慎重。
五、合併表分割槽(merge partition)
適用於出hash分割槽的其他任何分割槽。
語法:alter table tabname merge partition/sunpartition pt1,pt2 into paritition/subpartition pt3;
同樣也支援update indexes 子句以避免單獨執行造成索引失效的問題。
注意:要合併的兩個分割槽必須是連續的,這點事由分割槽本身的特性所決定的,會出現io操作。
六、修改list表分割槽--add values
alter table tabname modify partition/sunpartition patname add values (v1,v2,...vn);
注意:新增的value不能存在與當前的任何乙個分區內,特別是在有default 分割槽的時候,要先檢查當前表不存在新增的記錄
七、修改list分割槽--drop values
語法:alter table tabname modify partition/subpartition patname drop values(v1,v2,..vn);
八、拆分分割槽表(split partition)
針對不同的語法對應不同的分割槽:
range: alter table tabname split partition patname at (value) into (partition newpt1 tab_spc,partition newpt2 tab_spc);
list:alter table tabname split partition patname values( v1,v2,v3,..vn) into (partition newpt1 tab_spc,partition newpt2 tab_spc)
九、截斷表分割槽(truncate partition)
truncate partition 就像truncate table 一樣,直接從頭部截斷資料,用來刪除資料那是效率超高無比。但是如果該錶有外來鍵引用的話,ddl 的truncate 就不好使了,這時候你只能要麼使用delete,要麼先disable 掉外來鍵關聯再truncate 了。同樣,在不指定update indexes 子句的情況下,truncate partition 也會造成分割槽所在表的global 索引失效。
語法非常簡單:alter table tbname truncate partition/subpartition ptname;
十、移動表分割槽(move partition)
move partition 與modify partition 的功能相似,但又比之更加強勁,比如可以修改分割槽所在表空間等等,與move table 的操作很類似,某些時間也非常有用,比如降低行遷移。
語法很簡單:alter table tbname move partition/subpartition ptname .....;
十一、重新命名表分割槽(rename partition)
就是改名,跟改表名、改列名的操作目的是類似的,語法也很簡單:
alter table tbname rename partition ptname to newptname;
十二、修改表分割槽預設屬性(modify default attributes)
修改表或表中分割槽的儲存引數,對當前表和分割槽的儲存引數沒有影響,只有修改過之後,當你下次再新增分割槽時,在不手工顯式指定新分割槽引數的情況下,新分割槽預設使用你當前指定的儲存引數。有兩種操作方式:
修改表屬性,適用於range,list,hash 分割槽形式(注意hash 分割槽只能修改預設表空間引數)
alter table tabname modify default attributes tab_spc
修改分割槽屬性,適用於組合分割槽:
alter table tabname modify default attribute for partition pt1 tab_spc.
十三、修改表分割槽當前屬性(modify partition)
與上不同,該命令修改的不是預設屬性,而是分割槽當前的儲存屬性,即修改即生效的那種,雖然號稱是修改當前分割槽屬性,但實際上也有限制,比如所在表空間它就改不了(如果你想改,可以用move partition,後面會講到)。
十四、修改錶子分割槽模板(set subpartition template )
既然是修改子分割槽模板,自然是只針對復合分割槽有效。修改分割槽模式不會改變當前的分割槽結構,只有當你再增加、合併分割槽並且未顯式指定子分割槽儲存引數時,才會繼承新分割槽模板中的引數。
該命令語法很簡單:alter table tbname set subpartition template ....;
oracle表分割槽設計 ORACLE 分割槽表的設計
分割槽表的概念 分割槽致力於解決支援極大表和索引的關鍵問題。它採用他們分解成較小和易於管理的稱為分割槽的片 piece 的方法。一旦分割槽被定義,sql語句就可以訪問的操作某乙個分割槽而不是整個表,因而提高管理的效率。分割槽對於資料倉儲應用程式非常有效,因為他們常常儲存和分析巨量的歷史資料。分割槽表...
oracle表分割槽設計 ORACLE分割槽表的設計
分割槽表的概念 分割槽致力於解決支援極大表和索引的關鍵問題。它採用他們分解成較小和易於管理的稱為分割槽的片 piece 的方法。一旦分割槽被定義,sql語句就可以訪問的操作某乙個分割槽而不是整個表,因而提高管理的效率。分割槽對於資料倉儲應用程式非常有效,因為他們常常儲存和分析巨量的歷史資料。分割槽表...
oracle表分割槽設計 ORACLE 分割槽表的設計
oracle 分割槽表的設計 分割槽表的概念 分割槽致力於解決支援極大表和索引的關鍵問題。它採用他們分解成較小和易於管理的稱為分割槽的片 piece 的方法。一旦分割槽被定義,sql語句就可以訪問的操作某乙個分割槽而不是整個表,因而提高管理的效率。分割槽對於資料倉儲應用程式非常有效,因為他們常常儲存...