当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《禁用并稍后在Oracle中启用所有表索引》经验,为你挑选了2个好方法。

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

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



1> jmc..:

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

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;

重建将是类似的.



2> 小智..:

将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

进口......

select 'alter index ' || u.index_name || 
' rebuild online;' from user_indexes u;

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

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有