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)
重建将是类似的.
小智 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"(并记住将参数放回你找到的方式.
从这里: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];