PDA

Ver la Versión Completa : Evitar Triggers Al Vaciar Tabla [Firebird]


LuCkY_007
08-03-2007, 17:28:02
Hola. Gracias de Antemano a todos

Ahora vamos al meollo, tengo una base de datos con 436 tablas , 956 procedures, 1334 Triggers etc etc... el caso es que es grandiiiiisima, el problema viene ahora, TENGO QUE VACIARLA :eek: necesito alguna manera de hacer que al borrar la tabla, evite los triggers y claves primarias/ajenas. :confused:

Lepe
08-03-2007, 20:11:48
Primero haz una copia de la base de datos, vía copiar y pegar y empieza a probar con ella.

Consiste en ver las tablas del sistema y juguetear un poco con ella, es delicado, por eso debes hacer una copia antes.

Suponiendo que usas Ib Expert:

(debes activa la opción de "ver tablas de sistema")

Si en concreto miras la tabla: RDB$TRIGGERS y vas a la pestaña Data, verás el contenido de la misma. Ordena por la columna RDB$SYSTEM_FLAG, observarás que si el valor es <null> se trata de un trigger creado por tí, además tienes la columna RDB$TRIGGER_INACTIVE que siendo igual a cero, estará activo.

Lo que se trataría es acceder a esas tablas del sistema, extraer la información que se va a modificar. Modificar la información que contiene, y al final restaurar la configuración inicial.

Lo de extraer la información, es que, por ejemplo, una vez modificado la columna RDB$TRIGGER_INACTIVE y establecerlo a null, (para desactivar el trigger), hecho esto, ya no sabemos qué triggers debemos volver a activar, por eso debemos guardar al menos los nombres de los disparadores para restaurar la configuración inicial.

El problema es identificar qué valores tiene cada uno y cual modificar, de ahí que hagas una copia, realices todos los cambios, restaurar la configuración inicial y comprobar que realmente ha funcionado (fácil... nadie ha dicho que lo sea).

Saludos

TJose
08-03-2007, 23:31:24
Hola LuCkY_007

si lo que quieres es tener la base de datos totalmente vacia de datos una solución es utilizar alguna aplicacion de gestión de Firebird, (IBExpert, SQLHammer por ejemplo) y obtener los metadatos de la base de datos. Desde IBExpert es así: Tools->Extract Metadata,

luego lo ejecutas y tienes la base limpia.

Saludos
TJose

TJose
08-03-2007, 23:41:21
Hola LuCkY_007

Perdón, parece que te contesté cualquiera en el post anterior, me confundí con esta parte de la oración

tengo una base de datos con 436 tablas , 956 procedures, 1334 Triggers etc etc... el caso es que es grandiiiiisima, el problema viene ahora, TENGO QUE VACIARLA

hablabas de la base de datos

Has probado de desactivando los triggers?

Saludos
TJose

Lepe
09-03-2007, 01:23:09
TJose, y digo yo, ¿qué diferencia hay entre vaciar una base de datos, y crear una nueva, con idéntica construcción, pero sin datos?

Creo que tu solución es perfecta y muy simple de ejecutar. Incluso tendría los generadores en el último valor usado. Si se quieren reiniciar a cero, es tan solo un pequeño script.

Saludos

TJose
09-03-2007, 01:53:39
Hola Lepe

es que no me queda en claro si se trata de una tabla en particular o toda la base de datos

Saludos
TJose

Lepe
09-03-2007, 15:52:38
Eso mejor que lo comente el autor de la pregunta, yo creo que se trata de toda la base de datos.

De todas formas, tu solución implica escribir 0 líneas de código. Se puede extraer todos los datos y metadatos de todas las tablas excepto de la que se quiere vaciar, después se extrae los metadatos de esa tabla en particular agregándolo al mismo script.

El proceso de extracción será largo, no lo dudo, pero no tendremos que rompernos la cabeza con las tablas de sistema.

Saludos

LuCkY_007
21-03-2007, 20:02:13
Me referia a toda la base de datos... Con lo de extract metadata creo que se cepillaba los triggers y demas solo dejaba las tablas... pero no me acuerdo bien, el caso esque lo he solucionado por que tenia una copia de la BD vacia por ahi (ufff). Aun asi me encantaria saber como poder hacerlo, por que seguro lo que voy a necesitar otra vez...

Lepe
21-03-2007, 20:22:20
Extrayendo los metadatos, se extrae todo. Mira con detenimiendo las opciones, en concreto, la casilla de verificación que dice "Extract all" ;).

Saludos