Plsql

Oracle 11:在巨大的生產表上將全域索引更改為本地索引

  • December 20, 2013

我有帶有全域索引的大分區表。我的情況是從歸檔分區中刪除舊數據。我不能簡單地刪除分區,因為我有全域索引。

所以我有想法使用 INVISIBLE local INDEX (計算 12-16h) 然後刪除全域索引並使新索引可見並將其重命名為剛剛刪除的全域索引。

但..

SQL> create index I_EMPLOYEE_SALARY_T on EMPLOYEE (SALARY, DEPARTAMENT) local invisible online;
create index I_EMPLOYEE_SALARY_T on EMPLOYEE (SALARY, DEPARTAMENT) local invisible online
                                             *
ERROR at line 1:
ORA-01408: such column list already indexed

是否有任何其他選項可以使用原子/快速操作即時更改 id 將全域索引更改為本地索引?

刪除全域索引然後創建新索引是不可接受的。

我發現解決方案可以更快地創建索引…(在 Oracle 11g 上執行良好)

drop index I_EMPLOYEE_SALARY_T;
create index I_EMPLOYEE_SALARY_T on EMPLOYEE (SALARY, DEPARTAMENT) 
tablespace IDX_TABLESPACE local unusable;

然後我需要重建索引線上選擇分區:

ALTER INDEX I_EMPLOYEE_SALARY_T REBUILD PARTITION partition_name online;

更改索引要快得多,因為它使用不同的、更快的機制並且可以更快地訪問數據。例如,當員工的數據(在本例中)按時間戳進行分區時。因此,更新的數據可以更快地獲得。

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