Frage

Wie würde ich deaktivieren und später alle Indizes in einer bestimmten Schema / Datenbank in Oracle aktivieren?

Hinweis: Dies ist zu sqlldr schneller läuft

.
War es hilfreich?

Lösung

Hier ist die Herstellung des Indizes unbrauchbar ohne die Datei:

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;
Die

Wiederaufbau ähnlich wäre.

Andere Tipps

die Kombination von 3 Antworten zusammen: (Weil eine select-Anweisung nicht ausgeführt wird die 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

Import Do ...

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

Hinweis: Dies setzt voraus, dass der Import in der gleichen (sqlplus) Sitzung passieren wird.
Wenn Sie „imp“ nennen wird es in einer separaten Sitzung ausgeführt werden, so dass Sie benötigen würde „ALTER SYSTEM“ verwenden anstelle von „ALTER SESSION“ (und erinnere mich an den Parameter wieder den Weg bringen Sie es gefunden.

Wenn Sie mit nicht-paralleler direktem Weg laden dann prüfen und Benchmark nicht die Indizes überhaupt fällt, vor allem, wenn die Indizes nur eine Minderheit der Säulen abdecken. Oracle hat einen Mechanismus für eine effiziente Wartung von Indizes auf direkten Weg Lasten.

Ansonsten würde ich raten auch die Indizes machen unbrauchbar, anstatt sie zu fallen. Weniger Chance versehentlich einen Index nicht neu zu erstellen.

Von hier: http://forums.oracle.com/forums/ thread.jspa? messageID = 2354075

alter session set skip_unusable_indexes = true;

alter index your_index unusable;

Import tun ...

alter index your_index rebuild [online];

Sie können Einschränkungen in Oracle deaktivieren, aber nicht Indizes. Es gibt einen Befehl einen Index ununsable zu machen, aber Sie haben den Index ohnehin neu zu erstellen, also würde ich wahrscheinlich nur ein Skript schreiben, fallen zu lassen und die Indizes neu zu erstellen. Sie können die USER_INDEXES und user_ind_columns verwenden, um alle Indizes für ein Schema oder Verwendung DBMS_METADATA zu erhalten:

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

Wenn Sie auf Oracle 11g sind, können Sie auch dbms_index_utl .

Die Kombination der beiden Antworten:

Erste SQL erstellen, um alle Index unbrauchbar zu machen:

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

Import Do ...

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

Sie sollten sqlldr des SKIP_INDEX_MAINTENANCE Parameter versuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top