Oracle 11:在巨大的生产表上将全局索引更改为本地索引

WBA*_*BAR 5 index plsql

我有带有全局索引的大分区表。我的情况是从存档分区中删除旧数据。我不能简单地删除分区,因为我有全局索引。

所以我有想法使用 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
Run Code Online (Sandbox Code Playgroud)

是否还有其他选项可以使用原子/快速操作动态更改 id 将全局索引更改为本地索引?

删除全局索引然后创建新索引是不可接受的。

WBA*_*BAR 3

我找到了使创建索引速度更快的解决方案...(在 Oracle 11g 上工作正常)

drop index I_EMPLOYEE_SALARY_T;
create index I_EMPLOYEE_SALARY_T on EMPLOYEE (SALARY, DEPARTAMENT) 
tablespace IDX_TABLESPACE local unusable;
Run Code Online (Sandbox Code Playgroud)

然后我需要在线重建索引选择分区:

ALTER INDEX I_EMPLOYEE_SALARY_T REBUILD PARTITION partition_name online;
Run Code Online (Sandbox Code Playgroud)

更改索引要快得多,因为它使用不同的、更快的机制,并且可以更快地访问数据。例如,当员工数据(在本示例中)按时间戳进行分区时。因此可以更快地获得更新的数据。