Oracle
刪除分區並“線上”重建全域索引
我正在使用 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_GIDX
或ALTER INDEX COALESCE CLEANUP
,或者數據庫也可以為您自動完成(有一個預定義的作業,稱為PMO_DEFERRED_GIDX_MAINT_JOB
)。