PDA

Ver la Versión Completa : ¿Cómo versionar el esquema o los metadatos de base de datos?


erasmo_ga
06-12-2011, 23:10:48
Saludos a toda la comunidad,

busco un consejo de como versionar el esquema de la base de datos firebird, tengo una aplicación en producción pero cada día tengo que hacer cambios a la estructura de la base de datos, no se por donde abordar el tema de replicar los cambios a las bases de datos de las personas que ya tienen mi aplicación.

Mi idea es tener una dato que aloje la versión de la base de datos,. y que la aplicación automáticamente verifique que la base de datos este actualizada, si no es así, que aplique los scripts que ponga al día la base de datos con los últimos cambios.

FB 2.5
Delphi XE
Win7

Gracias!

Neftali [Germán.Estévez]
07-12-2011, 12:17:17
Más o menos es lo que he hecho yo alguna vez.

1) Un campo en la Base de Datos que marca la versión.
2) Utilizando herramientas específicas para ello (DataBase Comparer), a cada versión obteníamos el Script que permitía actualizar la Base de Datos a la ueva versión.
3) Con cada actualización de la aplicación se incluían los Scripts convenientemente numerados.
4) Al ejecutar la actualización se lanzaban los Scripts necesarios (de forma ordenada) para pasar de la versión actual a la nueva.

Casimiro Notevi
07-12-2011, 12:35:35
Más o menos como indica Neftalí, tenemos una tabla que cuando se crea la BD almacenamos la versión y subversión de la misma, además de la fecha y otros campos.
Luego, cuando sacamos actualizaciones, éstas llevan también un número de versión y subversión que se compara con el de la BD que se va a actualizar, se ejecutan sólo los que son más nuevas que los de la propia BD y finalmente se actualiza la BD con los datos de la última ejecutada.
La diferencia es que nosotros tenemos un programita que hicimos a propósito para realizar el proceso.
Es de hace muchos años, pero nunca ha fallado porque es algo muy simple.
La tabla es esta:

CREATE TABLE TBSENTENCIAS_SQL_EJECUTADAS(
NUMEROPRINCIPAL Integer NOT NULL,
NUMEROSECUNDARIO Integer DEFAULT 1 NOT NULL,
FECHAEJECUCION Timestamp DEFAULT "Now",
USUARIO DOMCODIGONONULO,
PUESTOTRABAJO DOMCODIGONONULO,
PRIMARY KEY (NUMEROPRINCIPAL,NUMEROSECUNDARIO)
);

Aunque hay muchas formas de hacer todo esto.

mamcx
07-12-2011, 15:21:29
A parte de eso, utiliza una herramienta de control de versiones, como subversion o mejor aun mercurial o git.

Lo que hago es que tengo un archivo SQL con el esquema completo de la BD y todos los cambios se hacen sobre el. Luego tengo varios Upgrade-NUMVERSION.sql que tienen los cambios.


Al combinar ambas cosas, tienes un versionado completo.

erasmo_ga
08-12-2011, 03:08:05
De ante mano muchas gracias por las respuestas y consejos, sus respuestas han sido de gran ayuda; me iré sobre la primera recomendación:

1) Agregar en la base de datos destino un campo con el numero de revisión.
2) Con IBExpert en la información de de registro de la base de datos, hay manera llegar un log de cambios tanto en la metadata, los scripts y hasta de los sql`s que se ejecutan, la opción se llama Archivos de Bitácora. Probé con DataBase Comparer, pero son mas pasos seguir y genera unos scripts muy grandes.
3) Con cada actualización de la aplicación se incluirán los Scripts convenientemente numerados. (aquí es posible que se me complique un poco mas ya que como requerimiento las actualizaciones las obtendrá del Internet, que locura!:cool:)
4) Al ejecutar la actualización se lanzaran los Scripts necesarios (de forma ordenada) para pasar de la versión actual a la nueva.

Les cuento como va!