Jak wyłączyć, a następnie włączyć wszystkie indeksy w danym schemacie/bazie danych w Oracle?Wyłącz i włącz wszystkie indeksy tabel w Oracle
Uwaga: aby program sqlldr działał szybciej.
Jak wyłączyć, a następnie włączyć wszystkie indeksy w danym schemacie/bazie danych w Oracle?Wyłącz i włącz wszystkie indeksy tabel w Oracle
Uwaga: aby program sqlldr działał szybciej.
Oto co indeksy bezużyteczny bez pliku:..
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;
Przebudowa będzie podobna.
stąd: http://forums.oracle.com/forums/thread.jspa?messageID=2354075
alter session set skip_unusable_indexes = true;
alter index your_index unusable;
zrobić import ...
alter index your_index rebuild [online];
Można wyłączyć ograniczenia w Oracle, ale nie indeksów. Istnieje polecenie, aby uczynić indeks niezrozumiałym, ale mimo wszystko trzeba go odbudować, więc prawdopodobnie po prostu napiszę skrypt, by upuścić i odbudować indeksy. Można użyć user_indexes i user_ind_columns uzyskać wszystkie indeksy dla schematu lub wykorzystanie dbms_metadata:
select dbms_metadata.get_ddl('INDEX', u.index_name) from user_indexes u;
łącząc dwie odpowiedzi:
najpierw utworzyć SQL, aby cały indeks bezużyteczny:
alter session set skip_unusable_indexes = true;
select 'alter index ' || u.index_name || ' unusable;' from user_indexes u;
Dokonaj importu ...
select 'alter index ' || u.index_name || ' rebuild online;' from user_indexes u;
Jeśli korzystasz z nieliniowej ścieżki bezpośredniej ładunki następnie rozważ i porównuj, nie pomijając indeksów, szczególnie jeśli indeksy obejmują tylko mniejszość kolumn. Oracle ma mechanizm wydajnej konserwacji indeksów na bezpośrednie obciążenia ścieżek.
W przeciwnym razie zaleciłbym uczynienie indeksów bezużytecznymi zamiast ich upuszczania. Mniejsza szansa na przypadkowe odtworzenie indeksu.
łączące 3 odpowiedzi ze sobą: (ponieważ SELECT nie wykona 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
Czy import ...
select 'alter index ' || u.index_name ||
' rebuild online;' from user_indexes u;
Uwaga ta zakłada, że import będzie się działo w tej samej sesji (sqlplus).
Jeśli dzwonisz „imp” będzie działać w osobnej sesji, więc trzeba by użyć „ALTER SYSTEM” zamiast „ALTER SESSION” (i pamiętać, aby umieścić parametr z powrotem tak, jak znalazł.
Jeśli jesteś na Oracle 11g, można również zapoznać się dbms_index_utl
należy starać parametr SKIP_INDEX_MAINTENANCE sqlldr za
Czy możesz podać trochę więcej kontekstu? Na przykład, czy wypróbowałeś następujące scenariusze: http: // www.remote-dba.net/teas_rem_util18.htm –