index examples example drop create auto_increment 11g sql oracle sql-loader

sql - examples - select index oracle



Deshabilitar y luego habilitar todos los índices de tabla en Oracle (8)

¿Cómo desactivo y luego habilito todos los índices en un esquema / base de datos dado en Oracle?

Nota: Esto es para hacer que sqlldr funcione más rápido.


Combinando las dos respuestas:

Primero crea sql para hacer que todo el índice sea inutilizable:

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

Importa ...

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


Debería probar el parámetro SKIP_INDEX_MAINTENANCE de sqlldr.



Esto hace que los índices sean inutilizables sin el archivo:

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;

La reconstrucción sería similar.


Puede deshabilitar restricciones en Oracle pero no índices. Hay un comando para hacer que un índice no se pueda usar, pero hay que reconstruirlo de todos modos, así que probablemente solo escriba un script para descartar y reconstruir los índices. Puede usar user_indexes y user_ind_columns para obtener todos los índices para un esquema o usar dbms_metadata:

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


Si está utilizando cargas de ruta directa no paralelas, considere y haga una prueba de referencia para no descartar los índices, particularmente si los índices solo cubren una minoría de las columnas. Oracle tiene un mecanismo para el mantenimiento eficiente de los índices en las cargas de ruta directa.

De lo contrario, también recomendaría hacer los índices inutilizables en lugar de descartarlos. Menos posibilidades de no recrear accidentalmente un índice.



combinando 3 respuestas juntas: (porque una declaración de selección no ejecuta el 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

Importa ...

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

Tenga en cuenta que esto supone que la importación va a suceder en la misma sesión (sqlplus).
Si llama a "imp", se ejecutará en una sesión separada por lo que necesitaría usar "ALTER SYSTEM" en lugar de "ALTER SESSION" (y recuerde volver a poner el parámetro como lo encontró).