以编程方式删除并重新创建Oracle索引以进行批量更新

时间:2017-09-26 15:57:18

标签: oracle

由于Oracle不支持禁用普通索引,因此我希望在批量更新之前以编程方式删除表上的所有索引,并在更新完成后重新创建它们。我想这需要一些自定义的PL / SQL。任何人都可以提供解决方案吗?也许这里有人写过这样的剧本。

供参考,这是SQL Server的解决方案:Automatically Drop and Recreate current indexes

1 个答案:

答案 0 :(得分:1)

set head off
set echo off
set pages 1000
set lines 300
set feedback off
spool index_unusable.sql
select 'alter index ' || index_name || ' unusable;' from user_indexes where table_name='MY_TABLE';
spool off
@index_unusable.sql

您是否在会话之前批量导入设置:

alter session set skip_unusable_indexes=true;
导入后

set head off
set echo off
set pages 1000
set lines 300
set feedback off
spool index_rebuild.sql
select 'alter index ' || index_name || ' rebuild;' from user_indexes where table_name='MY_TABLE';
spool off
@index_rebuild.sql

如果您有约束,您还需要使用以下方法禁用它们:

 alter table mytable modify constraint constraint_name DISABLE keep index;