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 18-06-2004
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 377
Poder: 22
lbuelvas Va por buen camino
Como activar/desactivar todos los triggers con una sola instruccion

Hola foro,

Tiempo sin vernos, tenemos una BD con bastantes triggers (cerca de 200) y eso que todavia no hemos colocado triggers para hacer trazo de auditoria en campos especificos por cada tabla (3 triggers por cada tabla).

Quisieramos saber si es posible con una sola instruccion (y sin provocar daños) activar / desactivar todos los triggers

Gracias
__________________
Luis Fernando Buelvas T.
Responder Con Cita
  #2  
Antiguo 18-06-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Creo que no hay ninguna instrucción para desactivarlos todos de golpe, aunque te puedes montar un procedimiento almacenado que recorra las tablas de sistema para averiguar todos los triggers, y irlos desactivando uno a uno, mediante sentencias generadas dinamicamente y ejecutadas con la instrucción EXECUTE STATEMENT (solo para Firebird 1.5).

NOTA: Si no utilizas Firebird 1.5, puedes hacer lo mismo, pero desde tu aplicación Delphi.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 18-06-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Por cierto, creo que un Trigger solo puedes activarlo/desactivarlo 255 veces antes de tener que desbloquearlo mediante un Backup/Restore.

Parece ser que todos los objetos tienen un contador de modificaciones, que solo puede llegar a 255, y que se resetea con un Backup/Restore.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #4  
Antiguo 18-06-2004
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 377
Poder: 22
lbuelvas Va por buen camino
Me puse a ver algo del diccionario de datos, fijense que con

select *
from rdb$triggers
where rdb$trigger_name not starting with 'RDB$'
and rdb$trigger_name not starting with 'CHECK'

se pueden ver los triggers del usuario y el campo que dice
si esta activo/inactivo el trigger es inactive (0 activo, 1 inactivo)

sera que para desactivarlos la instruccion de abajo funcionará ?

update
from rdb$triggers
set inactive = 1
where rdb$trigger_name not starting with 'RDB$'
and rdb$trigger_name not starting with 'CHECK'

y para activarlos

update
from rdb$triggers
set inactive = 0
where rdb$trigger_name not starting with 'RDB$'
and rdb$trigger_name not starting with 'CHECK'
__________________
Luis Fernando Buelvas T.
Responder Con Cita
  #5  
Antiguo 18-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Creo que no es conveniente alterar directamente el diccionario de datos. Puede que en esta versión de ib/fb te sea suficiente con cambiar ese campo (que no lo se), pero nada garantiza que sea así en versiones futuras. Por ello, creo que es mejor seguir el consejo de marc, e ir generando sentencias SQL para desactivar los triggers uno a uno.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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 20:22:47.


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