刪除表分區(drop partition)
刪除表分區包含兩種操作,分別是:
Ø 刪除分區:alter table [tbname] drop partition [ptname] UPDATE GLOBAL INDEXES ;
Ø 刪除子分區:alter table [tbname] drop subpartition [ptname] UPDATE GLOBAL INDEXES;
除hash分區和hash子分區外,其它的分區格式都可以支持這項操作。 例如,刪除分區:
JSSWEB> select table_name,partition_name
2 from user_tab_partitions where table_name='T_PARTITION_LIST';
TABLE_NAME PARTITION_NAME
------------------------------ ------------------------------
T_PARTITION_LIST T_LIST_P1
T_PARTITION_LIST T_LIST_P2
T_PARTITION_LIST T_LIST_P3
T_PARTITION_LIST T_LIST_PD
JSSWEB> alter table t_partition_list drop partition t_list_p2 UPDATE GLOBAL INDEXES;
表已更改。
提示,drop partition時,該分區內存儲的數據也將同時刪除,例如:
SSWEB> insert into t_partition_list values (1,'a'); ..........
--插入一批記錄,分布於當前各個分區 ..........
JSSWEB> commit;
提交完成。
JSSWEB> insert into t_partition_list values (1,'a'); ..........
--插入一批記錄,分布於當前各個分區 ..........
JSSWEB> commit;
提交完成。
JSSWEB> select *from t_partition_list;
ID NAME
---------- --------------------------------------------------
1 a 2 b 21 a 22 b
--單獨查詢t_list_p3分區,當前有數據
JSSWEB> select *from t_partition_list partition(t_list_p3);
ID NAME
---------- --------------------------------------------------
21 a
22 b
--刪除t_list_p3分區,數據會被同時刪除
JSSWEB> alter table t_partition_list drop partition t_list_p3 UPDATE GLOBAL INDEXES;
表已更改。
JSSWEB> select *from t_partition_list partition(t_list_p3); select *from t_partition_list partition(t_list_p3)
* 第 1 行出現錯誤:
ORA-02149: 指定的分區不存在
--刪除t_list_p3分區,數據會被同時刪除
JSSWEB> alter table t_partition_list drop partition t_list_p3;
表已更改。
JSSWEB> select *from t_partition_list partition(t_list_p3); select *from t_partition_list partition(t_list_p3)
* 第 1 行出現錯誤:
ORA-02149: 指定的分區不存在
JSSWEB> select *from t_partition_list;
ID NAME
---------- --------------------------------------------------
1 a
2 b
由於是ddl操作,這種刪除也會是非常迅速的,因此如果你確認某個分區的數據都要被刪除,使用drop partition會比delete更加高效。如果你的本意是希望刪除掉指定的分區但保留數據,你應該使用merge partition,后面也會講到。
同樣,如果你在執行該語句時沒有指定update indexes子句,也會導致glocal索引的失效,至於local索引嘛,刪除分區時對應的索引分區會被同時刪除,但其它分區的local索引不會受到影響。
附錄:
drop partition就是清除分區及其數據和索引
truncated 就是先清除數據和索引但分區還在
性能我覺得應該沒什么區別~看你的分區是否要保留了
