Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-11-2003
Avatar de abel
abel abel is offline
Miembro
 
Registrado: sep 2003
Posts: 59
Poder: 21
abel Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 28-11-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 28-11-2003
Avatar de abel
abel abel is offline
Miembro
 
Registrado: sep 2003
Posts: 59
Poder: 21
abel Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:52:05.


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
Copyright 1996-2007 Club Delphi