Oracle11g維護分割槽(三)——Dropping Partitions
刪除分割槽
你可以從範圍、間隔、列表或者複合[範圍|列表]分割槽表中刪除分割槽。對於間隔分割槽表而言,你只能刪除範圍分割槽或者那些已經物化的間隔分割槽。對於雜湊分割槽表或者複合雜湊分割槽表的雜湊子分割槽而言,你必須使用融合操作來代替。
你不能從引用分割槽表中刪除一個分割槽。相反,對父表的刪除操作會級連到所有子表。
刪除表分割槽
使用一下語句來刪除一個表分割槽或者子分割槽:
l ALTER TABLE ... DROP PARTITION,用來刪除一個表分割槽
l ALTER TABLE ... DROP SUBPARTITION,用來刪除一個複合[範圍|列表]分割槽表的一個子分割槽
為了儲存分割槽裡的資料,可以使用合併分割槽語句來代替刪除分割槽語句。
如果該表定義有本地索引,那麼上述語句將會從本地索引中刪除對應的分割槽或子分割槽。所有的全域性索引,或者全域性分割槽索引的所有分割槽都將被標識為UNUSABLE,除非符合下面兩個條件之一:
l 你指定了UPDATE INDEXES子句(不能用來指定索引組織表,可以使用UPDATE GLOBAL INDEXES來代替)
l 刪除的分割槽或者子分割槽為空
注意:
如果一個表只包含一個分割槽,你不能刪除該分割槽。相反,你必須刪除這個表。
在間隔分割槽表或者間隔複合分割槽表的範圍分割槽部分,你不能刪除最高的範圍分割槽。
下面的部分包含了刪除表分割槽的一些場景。
從一個包含資料和全域性索引的表中刪除一個分割槽
如果分割槽包含資料並且表上定義有一個或多個全域性索引,那麼可以使用下面任一方法來刪除表分割槽。
方法一
在ALTER TABLE ... DROP PARTITION語句執行期間,保持全域性索引不變。然後,你必須重建全部全域性索引(無論是否分割槽),因為這個索引(或者索引分割槽)已經被標識為UNUSABLE。下面的語句提供了一個示例,首先從sales表刪除分割槽dec98,然後重建該表的全域性索引。
ALTER TABLE sales DROP PARTITION dec98;
ALTER INDEX sales_area_ix REBUILD;
如果索引sales_area_ix是一個範圍分割槽全域性索引,那麼索引的全部分割槽都需要重建。並且,我們不可能在一條語句中重建索引的所有分割槽。你必須針對索引的每一個分割槽分別執行REBUILD語句。下面的語句分別重建了索引分割槽jan99_ix, feb99_ix, mar99_ix, ..., dec99_ix。
ALTER INDEX sales_area_ix REBUILD PARTITION jan99_ix;
ALTER INDEX sales_area_ix REBUILD PARTITION feb99_ix;
ALTER INDEX sales_area_ix REBUILD PARTITION mar99_ix;
...
ALTER INDEX sales_area_ix REBUILD PARTITION dec99_ix;
該方法最適用於被刪除分割槽包含總資料很大比例的大表。
方法二
在執行ALTER TABLE ... DROP PARTITION之前,執行DELETE語句來刪除分割槽的所有資料行。DELETE語句更新全域性索引。
例如,要刪除第一個分割槽,執行以下語句:
DELETE FROM sales partition (dec98);
ALTER TABLE sales DROP PARTITION dec98;
該方法最適用於小表,或者被刪除分割槽資料佔總資料很小比例的大表。
方法三
在執行ALTER TABLE... DROP PARTITION語句時指定UPDATE INDEXES語句。這樣做的話,在刪除分割槽的同時也會更新全域性索引。
ALTER TABLE sales DROP PARTITION dec98
UPDATE INDEXES;
從一個包含資料和引用完整性約束的表中刪除一個分割槽
如果該表包含引用完整性約束,並且一個分割槽包含資料,選擇下面一種方法來刪除該分割槽。該表只有一個本地索引,因此不需要重建任何索引。
方法一
如果表中不含引用被刪除分割槽中資料的資料,那麼你可以禁用引用表的完整性約束,執行ALTER TABLE ... DROP PARTITION語句,然後在重新啟用完整性約束。
該方法最適用於被刪除分割槽包含總資料很大比例的大表。如果表中含有引用被刪除分割槽中資料的資料,那麼必須確保刪除這些資料,這樣你就可以重新啟用引用完整性約束。
方法二
如果引用表中有資料,那麼在你執行ALTER TABLE ... DROP PARTITION語句之前,你可以執行DELETE語句來刪除分割槽的所有資料。DELETE語句會強制引用完整性約束,也會激發觸發器並生成redo和undo日誌。如果你建立約束時包含ON DELETE CASCADE選項,那麼刪除操作也會成功刪除引用表的所有行。
DELETE FROM sales partition (dec94);
ALTER TABLE sales DROP PARTITION dec94;
該方法最適用於小表,或者被刪除分割槽資料佔總資料很小比例的大表。
刪除間隔分割槽
你可以刪除一個間隔分割槽表中的間隔分割槽。該操作只會刪除分割槽的資料,分割槽的定義會被保留。如果有資料插入到剛剛被刪除的分割槽,那麼資料庫將會再次建立一個間隔分割槽。
你也可以刪除一個間隔分割槽表中的範圍分割槽。在一個間隔分割槽表中刪除一個範圍分割槽,要遵守在一個範圍分割槽表中刪除一個範圍分割槽的規則。如果你要刪除範圍分割槽靠中間的分割槽,那麼下一分割槽的下邊界將會移動到你剛剛刪除的那個分割槽的下邊界。你不能刪除一個間隔分割槽表中範圍分割槽部分的最高範圍分割槽。
下面的例子刪除了sales表的2007年九月的間隔分割槽。由於該標只有本地索引,沒有索引失效。
ALTER TABLE sales DROP PARTITION FOR(TO_DATE('01-SEP-2007','dd-MON-yyyy'));
刪除索引分割槽
你不能顯式地刪除一個本地索引的一個分割槽。相反,只有你刪除基表的一個分割槽時相應的本地索引分割槽會被刪除。
如果一個全域性分割槽索引為空,那麼你可以透過執行ALTER INDEX ... DROP PARTITION語句顯式地刪除索引分割槽。但是,如果一個全域性索引分割槽不為空,那麼刪除這個分割槽將會導致下一個最高分割槽被標識為UNUSABLE。例如,你要刪除索引分割槽P1,P2時下一個最高分割槽。你必須執行以下語句:
ALTER INDEX npr DROP PARTITION P1;
ALTER INDEX npr REBUILD PARTITION P2;
注意:
在一個全域性索引中,你不能刪除最高分割槽。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-1743731/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle11g維護分割槽(八)——Renaming PartitionsOracle
- Oracle11g維護分割槽(四)——Exchanging PartitionsOracle
- Oracle11g維護分割槽(二)——Coalescing PartitionsOracle
- Oracle11g維護分割槽(九)——Truncatinging PartitionsOracle
- Oracle11g維護分割槽(五)——Merging PartitionsOracle
- Oracle11g維護分割槽(一)——Adding PartitionsOracle
- Oracle11g維護分割槽(七)——Modifying Real Attributes of PartitionsOracle
- Oracle11g維護分割槽概述Oracle
- oracle分割槽及分割槽索引partition_partition index_維護(三)Oracle索引Index
- Oracle11g維護分割槽(六)——Modifying Default AttributesOracle
- oracle分割槽表的維護Oracle
- 【轉】Oracle分割槽表維護Oracle
- Oracle分割槽表基礎運維-08Coalescing PartitionsOracle運維
- 分割槽索引維護(add partition)索引
- 測試oracle子分割槽維護Oracle
- oracle分割槽及分割槽索引partition_partition index_維護(一)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(二)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(四)Oracle索引Index
- Oracle11g INTERVAL分割槽新增分割槽策略Oracle
- 海量資料處理_表分割槽(分割槽自動維護與歷史分割槽歸檔)
- ORACLE分割槽表梳理系列(二)- 分割槽表日常維護及注意事項Oracle
- oracle分割槽及分割槽索引partition_partition index_維護(五)_快捷方法Oracle索引Index
- 關於 Oracle 分割槽索引的建立和維護Oracle索引
- 在範圍分割槽表上分割槽維護操作對索引狀態的影響索引
- 在範圍分割槽表上分割槽維護操作對索引狀態的影響(1)索引
- 【eygle】Oracle的分割槽表和Local索引建立與維護Oracle索引
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-03HASH分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- 在範圍分割槽表上分割槽維護操作對全域性及本地索引狀態的影響(2)索引
- Oracle分割槽表基礎運維-01分割槽表分類Oracle運維
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- 【學習筆記】分割槽表和分割槽索引——分割槽表的其他管理(三)筆記索引