Oracle 刪除表分區


刪除表分區(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 就是先清除數據和索引但分區還在
性能我覺得應該沒什么區別~看你的分區是否要保留了


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM