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)
-   -   ¿Cómo versionar el esquema o los metadatos de base de datos? (https://www.clubdelphi.com/foros/showthread.php?t=76942)

erasmo_ga 06-12-2011 23:10:48

¿Cómo versionar el esquema o los metadatos de base de datos?
 
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:

Código SQL [-]
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!


La franja horaria es GMT +2. Ahora son las 04:12:43.

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