Oracle의 모든 테이블 인덱스를 비활성화하고 나중에 활성화하십시오

StackOverflow https://stackoverflow.com/questions/129046

  •  02-07-2019
  •  | 
  •  

문제

Oracle의 주어진 스키마/데이터베이스의 모든 인덱스를 어떻게 비활성화하고 나중에 활성화합니까?

참고 : 이것은 sqlldr을 더 빨리 실행하는 것입니다.

도움이 되었습니까?

해결책

다음은 파일없이 인덱스를 사용할 수 없습니다.

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;

재건은 비슷할 것입니다.

다른 팁

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 Session"대신 "Alter System"을 사용해야합니다.

비 평면 직접 경로로드를 사용하는 경우, 특히 인덱스가 열의 소수만을 커버하는 경우 인덱스를 전혀 삭제하지 않는 것을 고려하고 벤치 마크하십시오. Oracle은 직접 경로 하중에 대한 인덱스를 효율적으로 유지하기위한 메커니즘을 가지고 있습니다.

그렇지 않으면 인덱스를 삭제하는 대신 색인을 사용할 수 없게하는 것이 좋습니다. 실수로 인덱스를 재현하지 않을 가능성이 적습니다.

여기에서: 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];

Oracle에서 제약 조건을 비활성화 할 수 있지만 색인은 없습니다. 인덱스를 예약 할 수 없도록하는 명령이 있지만 어쨌든 인덱스를 재건해야하므로 인덱스를 삭제하고 재 구축하기 위해 스크립트를 작성합니다. user_indexes 및 user_ind_columns를 사용하여 스키마의 모든 인덱스를 얻거나 dbms_metadata를 사용할 수 있습니다.

select dbms_metadata.get_ddl('INDEX', u.index_name) from user_indexes u;

Oracle 11G에 있다면 체크 아웃 할 수도 있습니다. DBMS_INDEX_UTL.

두 가지 답변 결합 :

먼저 모든 색인을 사용할 수 없도록 SQL을 만듭니다.

alter session set skip_unusable_indexes = true;
select 'alter index ' || u.index_name || ' unusable;' from user_indexes u;

수입 ...

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

sqlldr의 skip_index_mainenage 매개 변수를 시도해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top