Oracle

刪除分區並“線上”重建全域索引

  • December 10, 2020

我正在使用 Oracle 11g。

我需要刪除分區並重建全域索引。下面的查詢執行良好,但會阻塞表上的所有 DML 操作,直到重建索引。

ALTER TABLE ABC DROP PARTITION PART1 UPDATE GLOBAL INDEXES;

但是,如果我將查詢分成兩部分並分別使用 ONLINE 選項重建索引,則在重建索引時 DML 查詢不會被阻塞

ALTER TABLE ABC DROP PARTITION PART1;
ALTER INDEX XYZ REBUILD ONLINE;

這種方法的缺點是執行刪除分區和重建索引之間的時間,這些索引將無法使用,可能會產生性能問題。

所以我的問題是,是否有任何選項可以讓我在一個查詢中“線上”刪除分區並重建索引?目前我認為我們沒有以下選擇。

ALTER TABLE ABC DROP PARTITION PART1 UPDATE GLOBAL INDEXES ONLINE;

不在 11g 中。

即使在 12c 中也沒有,但 12c 讓生活更輕鬆,您可以將“重建”部分推遲到更合適的時間。

在 12c 中有一個新功能,稱為非同步全域索引維護。您可以刪除分區,這仍然使全域索引可用,並將不再需要的索引條目標記為孤立的。稍後,您可以清理此索引(DBMS_PART.CLEANUP_GIDXALTER INDEX COALESCE CLEANUP,或者數據庫也可以為您自動完成(有一個預定義的作業,稱為PMO_DEFERRED_GIDX_MAINT_JOB)。

引用自:https://dba.stackexchange.com/questions/128049