禁用并稍后在Oracle中启用所有表索引

one*_*elf 19 sql oracle sql-loader

如何在Oracle中禁用并稍后启用给定模式/数据库中的所有索引?

注意:这是为了使sqlldr运行得更快.

jmc*_*jmc 18

这里没有文件使索引无法使用:

DECLARE
  CURSOR  usr_idxs IS select * from user_indexes;
  cur_idx  usr_idxs% ROWTYPE;
  v_sql  VARCHAR2(1024);

BEGIN
  OPEN usr_idxs;
  LOOP
    FETCH usr_idxs INTO cur_idx;
    EXIT WHEN NOT usr_idxs%FOUND;

    v_sql:= 'ALTER INDEX ' || cur_idx.index_name || ' UNUSABLE';
    EXECUTE IMMEDIATE v_sql;
  END LOOP;
  CLOSE usr_idxs;
END;
Run Code Online (Sandbox Code Playgroud)

重建将是类似的.

  • 已经有一段时间了,但您应该能够将“UNUSABLE”替换为“REBUILD”。 (2认同)

小智 6

将3个答案组合在一起:(因为select语句不执行DDL)

set pagesize 0

alter session set skip_unusable_indexes = true;
spool c:\temp\disable_indexes.sql
select 'alter index ' || u.index_name || ' unusable;' from user_indexes u;
spool off
@c:\temp\disable_indexes.sql
Run Code Online (Sandbox Code Playgroud)

进口......

select 'alter index ' || u.index_name || 
' rebuild online;' from user_indexes u;
Run Code Online (Sandbox Code Playgroud)

请注意,这假定导入将在同一个(sqlplus)会话中发生.
如果你正在调用"imp",它将在一个单独的会话中运行,因此你需要使用"ALTER SYSTEM"而不是"ALTER SESSION"(并记住将参数放回你找到的方式.


Dmi*_*tov 5

从这里:http ://forums.oracle.com/forums/thread.jspa?messageID=2354075

alter session set skip_unusable_indexes = true;

alter index your_index unusable;

做进口...

alter index your_index rebuild [online];