PDA

Ver la Versión Completa : Activar/Desactivar TODOS los índices


abel
28-11-2003, 12:07:04
Hola:

Pues eso, ¿cómo puedo activar o desactivar todos los índices de todas las tablas?.

Es para hacer una insersión masiva de datos que resulta bastante lenta. Quisiera desactivarlos todos, pasar los datos y volver a activarlos todos.

Muchas gracias.

kinobi
28-11-2003, 12:26:34
Hola,

hasta lo que yo sé, no hay manera de desactivarlos todos de un golpe, tendrás que hacerlo uno por uno:


Para desactivar un índice:
ALTER INDEX nombre_índice INACTIVE;

Para activar un índice:
ALTER INDEX nombre_índice ACTIVE;


Los índices puedes obtenerlos con:


SELECT rdb$index_name FROM rdb$indices


Una alternativa (que no he probado y puede ser peligrosa) es "tocar" el flag rdb$index_inactive en rdb$indices. Algo parecido a:


Para desactivar todos los índices:

UPDATE rdb$indices
SET rdb$index_inactive = 1

Para activar todos los índices:

UPDATE rdb$indices
SET rdb$index_inactive = 0


Repito, esta última opción puede ser peligrosa.

Saludos.

abel
28-11-2003, 15:11:08
Hola:

Gracias por contestar.

La solución que has propuesto la he probado pero no funciona. Hay un campo que es rdb$system_flag que está a 1 en los índices del sistema y a null en los creados por mí. Igualmente el campo rdb$index_inactive está a 0 en los del sistema y a null en los que he creado.

He probado esto:

update rdb$indices
set rdb$index_inactive=1
where rdb$system_flag is null

pero sale el siguiente error:

Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
action cancelled by trigger (2) to preserve data integrity.
Cannot deactivate index used by an Integrity Constraint.

En fin, puede que no sea posible.

Muchas gracias.

Saludos.