oracle删除分区空间,Oracle 11g维护分区(三)——Dropping Partitions
刪除分區(qū)
你可以從范圍、間隔、列表或者復(fù)合[范圍|列表]分區(qū)表中刪除分區(qū)。對(duì)于間隔分區(qū)表而言,你只能刪除范圍分區(qū)或者那些已經(jīng)物化的間隔分區(qū)。對(duì)于哈希分區(qū)表或者復(fù)合哈希分區(qū)表的哈希子分區(qū)而言,你必須使用融合操作來(lái)代替。
你不能從引用分區(qū)表中刪除一個(gè)分區(qū)。相反,對(duì)父表的刪除操作會(huì)級(jí)連到所有子表。
刪除表分區(qū)
使用一下語(yǔ)句來(lái)刪除一個(gè)表分區(qū)或者子分區(qū):
ALTER TABLE ... DROP PARTITION,用來(lái)刪除一個(gè)表分區(qū)
ALTER TABLE ... DROP SUBPARTITION,用來(lái)刪除一個(gè)復(fù)合[范圍|列表]分區(qū)表的一個(gè)子分區(qū)
為了保存分區(qū)里的數(shù)據(jù),可以使用合并分區(qū)語(yǔ)句來(lái)代替刪除分區(qū)語(yǔ)句。
如果該表定義有本地索引,那么上述語(yǔ)句將會(huì)從本地索引中刪除對(duì)應(yīng)的分區(qū)或子分區(qū)。所有的全局索引,或者全局分區(qū)索引的所有分區(qū)都將被標(biāo)識(shí)為UNUSABLE,除非符合下面兩個(gè)條件之一:
你指定了UPDATE INDEXES子句(不能用來(lái)指定索引組織表,可以使用UPDATE GLOBAL INDEXES來(lái)代替)
刪除的分區(qū)或者子分區(qū)為空
注意:
如果一個(gè)表只包含一個(gè)分區(qū),你不能刪除該分區(qū)。相反,你必須刪除這個(gè)表。
在間隔分區(qū)表或者間隔復(fù)合分區(qū)表的范圍分區(qū)部分,你不能刪除最高的范圍分區(qū)。
下面的部分包含了刪除表分區(qū)的一些場(chǎng)景。
從一個(gè)包含數(shù)據(jù)和全局索引的表中刪除一個(gè)分區(qū)
如果分區(qū)包含數(shù)據(jù)并且表上定義有一個(gè)或多個(gè)全局索引,那么可以使用下面任一方法來(lái)刪除表分區(qū)。
方法一
在ALTER TABLE ... DROP PARTITION語(yǔ)句執(zhí)行期間,保持全局索引不變。然后,你必須重建全部全局索引(無(wú)論是否分區(qū)),因?yàn)檫@個(gè)索引(或者索引分區(qū))已經(jīng)被標(biāo)識(shí)為UNUSABLE。下面的語(yǔ)句提供了一個(gè)示例,首先從sales表刪除分區(qū)dec98,然后重建該表的全局索引。
ALTER TABLE sales DROP PARTITION dec98;
ALTER INDEX sales_area_ix REBUILD;
如果索引sales_area_ix是一個(gè)范圍分區(qū)全局索引,那么索引的全部分區(qū)都需要重建。并且,我們不可能在一條語(yǔ)句中重建索引的所有分區(qū)。你必須針對(duì)索引的每一個(gè)分區(qū)分別執(zhí)行REBUILD語(yǔ)句。下面的語(yǔ)句分別重建了索引分區(qū)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;
該方法最適用于被刪除分區(qū)包含總數(shù)據(jù)很大比例的大表。
方法二
在執(zhí)行ALTER TABLE ... DROP PARTITION之前,執(zhí)行DELETE語(yǔ)句來(lái)刪除分區(qū)的所有數(shù)據(jù)行。DELETE語(yǔ)句更新全局索引。
例如,要?jiǎng)h除第一個(gè)分區(qū),執(zhí)行以下語(yǔ)句:
DELETE FROM sales partition (dec98);
ALTER TABLE sales DROP PARTITION dec98;
該方法最適用于小表,或者被刪除分區(qū)數(shù)據(jù)占總數(shù)據(jù)很小比例的大表。
方法三
在執(zhí)行ALTER TABLE... DROP PARTITION語(yǔ)句時(shí)指定UPDATE INDEXES語(yǔ)句。這樣做的話,在刪除分區(qū)的同時(shí)也會(huì)更新全局索引。
ALTER TABLE sales DROP PARTITION dec98
UPDATE INDEXES;
從一個(gè)包含數(shù)據(jù)和引用完整性約束的表中刪除一個(gè)分區(qū)
如果該表包含引用完整性約束,并且一個(gè)分區(qū)包含數(shù)據(jù),選擇下面一種方法來(lái)刪除該分區(qū)。該表只有一個(gè)本地索引,因此不需要重建任何索引。
方法一
如果表中不含引用被刪除分區(qū)中數(shù)據(jù)的數(shù)據(jù),那么你可以禁用引用表的完整性約束,執(zhí)行ALTER TABLE ... DROP PARTITION語(yǔ)句,然后在重新啟用完整性約束。
該方法最適用于被刪除分區(qū)包含總數(shù)據(jù)很大比例的大表。如果表中含有引用被刪除分區(qū)中數(shù)據(jù)的數(shù)據(jù),那么必須確保刪除這些數(shù)據(jù),這樣你就可以重新啟用引用完整性約束。
方法二
如果引用表中有數(shù)據(jù),那么在你執(zhí)行ALTER TABLE ... DROP PARTITION語(yǔ)句之前,你可以執(zhí)行DELETE語(yǔ)句來(lái)刪除分區(qū)的所有數(shù)據(jù)。DELETE語(yǔ)句會(huì)強(qiáng)制引用完整性約束,也會(huì)激發(fā)觸發(fā)器并生成redo和undo日志。如果你創(chuàng)建約束時(shí)包含ON DELETE CASCADE選項(xiàng),那么刪除操作也會(huì)成功刪除引用表的所有行。
DELETE FROM sales partition (dec94);
ALTER TABLE sales DROP PARTITION dec94;
該方法最適用于小表,或者被刪除分區(qū)數(shù)據(jù)占總數(shù)據(jù)很小比例的大表。
刪除間隔分區(qū)
你可以刪除一個(gè)間隔分區(qū)表中的間隔分區(qū)。該操作只會(huì)刪除分區(qū)的數(shù)據(jù),分區(qū)的定義會(huì)被保留。如果有數(shù)據(jù)插入到剛剛被刪除的分區(qū),那么數(shù)據(jù)庫(kù)將會(huì)再次創(chuàng)建一個(gè)間隔分區(qū)。
你也可以刪除一個(gè)間隔分區(qū)表中的范圍分區(qū)。在一個(gè)間隔分區(qū)表中刪除一個(gè)范圍分區(qū),要遵守在一個(gè)范圍分區(qū)表中刪除一個(gè)范圍分區(qū)的規(guī)則。如果你要?jiǎng)h除范圍分區(qū)靠中間的分區(qū),那么下一分區(qū)的下邊界將會(huì)移動(dòng)到你剛剛刪除的那個(gè)分區(qū)的下邊界。你不能刪除一個(gè)間隔分區(qū)表中范圍分區(qū)部分的最高范圍分區(qū)。
下面的例子刪除了sales表的2007年九月的間隔分區(qū)。由于該標(biāo)只有本地索引,沒(méi)有索引失效。
ALTER TABLE sales DROP PARTITION FOR(TO_DATE('01-SEP-2007','dd-MON-yyyy'));
刪除索引分區(qū)
你不能顯式地刪除一個(gè)本地索引的一個(gè)分區(qū)。相反,只有你刪除基表的一個(gè)分區(qū)時(shí)相應(yīng)的本地索引分區(qū)會(huì)被刪除。
如果一個(gè)全局分區(qū)索引為空,那么你可以通過(guò)執(zhí)行ALTER INDEX ... DROP PARTITION語(yǔ)句顯式地刪除索引分區(qū)。但是,如果一個(gè)全局索引分區(qū)不為空,那么刪除這個(gè)分區(qū)將會(huì)導(dǎo)致下一個(gè)最高分區(qū)被標(biāo)識(shí)為UNUSABLE。例如,你要?jiǎng)h除索引分區(qū)P1,P2時(shí)下一個(gè)最高分區(qū)。你必須執(zhí)行以下語(yǔ)句:
ALTER INDEX npr DROP PARTITION P1;
ALTER INDEX npr REBUILD PARTITION P2;
注意:
在一個(gè)全局索引中,你不能刪除最高分區(qū)。
:
總結(jié)
以上是生活随笔為你收集整理的oracle删除分区空间,Oracle 11g维护分区(三)——Dropping Partitions的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oracle密码文件认证,Oracle
- 下一篇: oracle dg物理和逻辑,Oracl