Oracle 删除表分区
删除表分区(droppartition)
删除表分区包含两种操作,分别是:
Ø删除分区:altertable[tbname]droppartition[ptname] UPDATEGLOBALINDEXES;
Ø删除子分区:altertable[tbname]dropsubpartition[ptname]UPDATEGLOBALINDEXES;
除hash分区和hash子分区外,其它的分区格式都可以支持这项操作。例如,删除分区:
JSSWEB>selecttable_name,partition_name
2fromuser_tab_partitionswheretable_name='T_PARTITION_LIST';
TABLE_NAMEPARTITION_NAME
------------------------------------------------------------
T_PARTITION_LISTT_LIST_P1
T_PARTITION_LISTT_LIST_P2
T_PARTITION_LISTT_LIST_P3
T_PARTITION_LISTT_LIST_PD
JSSWEB>altertablet_partition_listdroppartitiont_list_p2 UPDATEGLOBALINDEXES;
表已更改。
提示,droppartition时,该分区内存储的数据也将同时删除,例如:
SSWEB>insertintot_partition_listvalues(1,'a');..........
--插入一批记录,分布于当前各个分区..........
JSSWEB>commit;
提交完成。
JSSWEB>insertintot_partition_listvalues(1,'a');..........
--插入一批记录,分布于当前各个分区..........
JSSWEB>commit;
提交完成。
JSSWEB>select*fromt_partition_list;
IDNAME
------------------------------------------------------------
1a2b21a22b
--单独查询t_list_p3分区,当前有数据
JSSWEB>select*fromt_partition_listpartition(t_list_p3);
IDNAME
------------------------------------------------------------
21a
22b
--删除t_list_p3分区,数据会被同时删除
JSSWEB>altertablet_partition_listdroppartitiont_list_p3UPDATEGLOBALINDEXES;
表已更改。
JSSWEB>select*fromt_partition_listpartition(t_list_p3);select*fromt_partition_listpartition(t_list_p3)
*第1行出现错误:
ORA-02149:指定的分区不存在
--删除t_list_p3分区,数据会被同时删除
JSSWEB>altertablet_partition_listdroppartitiont_list_p3;
表已更改。
JSSWEB>select*fromt_partition_listpartition(t_list_p3);select*fromt_partition_listpartition(t_list_p3)
*第1行出现错误:
ORA-02149:指定的分区不存在
JSSWEB>select*fromt_partition_list;
IDNAME
------------------------------------------------------------
1a
2b
由于是ddl操作,这种删除也会是非常迅速的,因此如果你确认某个分区的数据都要被删除,使用droppartition会比delete更加高效。如果你的本意是希望删除掉指定的分区但保留数据,你应该使用mergepartition,后面也会讲到。
同样,如果你在执行该语句时没有指定updateindexes子句,也会导致glocal索引的失效,至于local索引嘛,删除分区时对应的索引分区会被同时删除,但其它分区的local索引不会受到影响。
附录:
drop partition就是清除分区及其数据和索引
truncated 就是先清除数据和索引但分区还在
性能我觉得应该没什么区别~看你的分区是否要保留了