Wie würde ich alle Indizes in einem bestimmten Schema/Datenbank in Oracle deaktivieren und später aktivieren?Deaktivieren und aktivieren Sie später alle Tabellenindizes in Oracle
Hinweis: Dies ist zu machen sqlldr schneller laufen.
Wie würde ich alle Indizes in einem bestimmten Schema/Datenbank in Oracle deaktivieren und später aktivieren?Deaktivieren und aktivieren Sie später alle Tabellenindizes in Oracle
Hinweis: Dies ist zu machen sqlldr schneller laufen.
ist hier macht die 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;
Der Wiederaufbau wäre ähnlich.
Von hier aus: 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 Einschränkungen in Oracle deaktivieren können aber nicht Indizes. Es gibt einen Befehl, um einen Index unbrauchbar zu machen, aber Sie müssen den Index trotzdem neu erstellen, also würde ich wahrscheinlich ein Skript schreiben, um die Indizes zu löschen und neu aufzubauen. 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;
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;
importierte ...
select 'alter index ' || u.index_name || ' rebuild online;' from user_indexes u;
Wenn Sie nicht parallelen direkten Weg verwenden Ladevorgänge berücksichtigen und benchmarken, dass die Indizes überhaupt nicht gelöscht werden, insbesondere wenn die Indizes nur eine Minderheit der Spalten abdecken. Oracle verfügt über einen Mechanismus zur effizienten Verwaltung von Indizes für direkte Pfadlasten.
Ansonsten würde ich auch empfehlen, die Indizes unbrauchbar zu machen, anstatt sie fallen zu lassen. Geringere Wahrscheinlichkeit, dass ein Index nicht versehentlich neu erstellt wird.
Kombination 3 Antworten zusammen: (weil eine select-Anweisung der DDL nicht ausführen)
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 passieren wird in derselben (sqlplus) Sitzung.
Wenn Sie anrufen „imp“ sie in einer separaten Sitzung ausgeführt werden, so dass Sie „SYSTEM ALTER“ verwenden, müssten anstelle von „ALTER SESSION“ (und erinnere mich an den Parameter wieder den Weg bringen Sie es gefunden.
wenn Sie auf Oracle 11g sind, können Sie auch dbms_index_utl auszuchecken
Sie sollten sqlldr der SKIP_INDEX_MAINTENANCE Parameter versuchen
Könnten Sie ein wenig mehr Kontext geben? Haben Sie beispielsweise die folgenden Szenarien versucht: http: // www.remote-dba.net/teas_rem_util18.htm –