Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Activar/Desactivar TODOS los índices (https://www.clubdelphi.com/foros/showthread.php?t=5642)

abel 28-11-2003 12:07:04

Activar/Desactivar TODOS los índices
 
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:

Código:

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

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

Los índices puedes obtenerlos con:

Código:

  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:

Código:

  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:
Código:

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

pero sale el siguiente error:
Código:

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.


La franja horaria es GMT +2. Ahora son las 13:25:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi