Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Bases de Datos, control de versiones (https://www.clubdelphi.com/foros/showthread.php?t=90621)

AgustinOrtu 28-07-2016 08:54:07

Bases de Datos, control de versiones
 
Creo que el titulo lo dice todo. Alguien esta usando control de versiones para las bases de datos? Hay alguna herramienta "magica"? O alguna herramienta que ayude en este proceso? O para el que no usa nada "externo", como llevan este control?

Investigando muy rapido parece que hay cosillas por ahi dando vuelta, como las que ofrece Devart aqui

Hablando bien claro, lo que seria la bomba para mi es, darle a alguna "herramienta" una estructura de una BD, (o que la extraiga de alguna BD), una BD contra la que compara, y que me genere un diff, osea, un script sql que al ejecutarlo me deje la base al dia

O estoy pidiendo demasiado? :D :D

Casimiro Notevi 28-07-2016 09:46:41

Facilísimo :p
Ahora falta que digas qué base de datos usas.
IBexpert hace exactamente lo que necesitas.

AgustinOrtu 28-07-2016 16:47:24

Enserio? Que maravilla. Uso firebird en algún proyecto personal.

El problema es que también uso sqlite (en este lo tengo maso menos resuelto mediante código, pero sirve solo porque es un programa mono usuario y puedo "manosear" la base sin tanto miedo) y también sql server

mamcx 28-07-2016 17:04:21

Pues lo que describes suena muy facil. Generar script de BD es algo que es muy comun. Para lo demas usas mercurial/git y sobreescribees el archivo par los diff, o usas una herramienta de diff de forma directa.

AgustinOrtu 28-07-2016 20:18:24

Cita:

Empezado por mamcx (Mensaje 507247)
Pues lo que describes suena muy facil. Generar script de BD es algo que es muy comun. Para lo demas usas mercurial/git y sobreescribees el archivo par los diff, o usas una herramienta de diff de forma directa.


Mario eso suena sencillo si. Cualquier herramienta de por ahi para gestionar BD te genera el script que crea la BD que quieras, a partir de su estructura.

Ahora, lo que yo digo, como hago para dada una BD llamemosle "instalada", compararla contra la BD "actualizada" y que genere un diff que me deje la "instalada" = "actualizada". Eso seria la bomba. Basicamente podria automatizar la tarea y que no dependa de mi. Sencillamente tendria que dar la orden de disparar mail "nueva version xxx, apreten actualizar" y listo.

Admito que no tengo muy estudiado algunos gestores, por ejemplo, IBExpert, que lo he usado para lo mas basico posible. Pero tiene varios menues con muchas opciones que aun no se que existen (como lo que comento Casimiro)

Luego para SQLite uso uno super liviano, SQLite Administrator, aunque para cosas tambien muy basicas, como para ejecutar queries rapidamente, o si estoy en pruebas y quiero editar algo

Con el que mas "cosas raras" he hecho fue con el de SQL Server de Microsoft, pero que yo sepa no tiene algo como lo que apunto arriba; aunque por supuesto que puede generar scripts de lo que sea, de hecho, te permite configurar muchos aspectos del script resultante

El tema de la automatizar la sincronizacion de la BD es lo que me falta para automatizar completamente el proceso de distribucion de mis aplicaciones

mamcx 28-07-2016 20:50:02

Entonces estas es buscando sincronizar las BD? No meramente usar control de versiones para la parte de desarrollo?

Porque sincronizar BD en produccion es todo otro cuento.

Casimiro Notevi 28-07-2016 20:55:35

Yo, muy resumidamente, tengo una tabla con un campo que se llama "version".
Según voy añadiendo cambios a la estructura de la base de datos, voy anotándolo en un script, junto con un número.
1 update .....
2 insert into ....
3 create table ....
4 delete from table where ...
5 etc.

Cuando ejecutan el programa, veo qué número de versión es la base de datos y ejecuto todas las sentencias a partir del número que toque.
Ejemplo, base de datos con campo versión 4. Ejecutaría a partir de la 5.
Básicamente es eso.

Casimiro Notevi 28-07-2016 21:06:48

El ibexpert tiene esta opción:


AgustinOrtu 28-07-2016 21:12:52

Cita:

Empezado por mamcx (Mensaje 507252)
Entonces estas es buscando sincronizar las BD? No meramente usar control de versiones para la parte de desarrollo?

Porque sincronizar BD en produccion es todo otro cuento.

Si, la verdad que releyendo me exprese muy muy mal. La idea era que mas o menos compartan como lo hacen o si usaban alguna herramienta en particular. Estoy seguro de que vi una por ahi que de forma visual te permitia ir analizando los diff y veias como van quedando las tablas, te pone con rojo lo que eliminas, con verde lo nuevo (similar a como hacne los diff/merge tool con codigo)

Yo lo que voy haciendo es tener una carpeta "SQL" en el repositorio git y ahi voy tirando todos los script. Luego tambien voy manteniendo un script general que crea la BD (este lo genera SQL Management Studio\IBExpert, etc) el cual actualizo cada tanto o cada vez que hago un release nuevo

Cuando uso git a veces me pasa que tengo que "volver en el tiempo", esto es muy facil cambiandose a otra branch y recompilando, o con un reset hard a tal commit. Resulta util en muchos casos.

A lo que apunto y que quiza sea super utopico, y de ahi me vino la idea de "control de versiones para BD", es algo similar pero con la base. Osea que sea cuestion de clicks, "poneme la estructura de la base a como estaba el 18/05/2013 en la rev xxxx" similar a como hago con el codigo

EDTIO: Casimiro muchas gracias, voy a estudiarlo. Lamentablemente en este momento Firebird no es la que mas me interesa, pero que lo voy a usar muy pronto seguro

Casimiro Notevi 28-07-2016 21:17:01

Cita:

Empezado por AgustinOrtu (Mensaje 507257)
A lo que apunto y que quiza sea super utopico, y de ahi me vino la idea de "control de versiones para BD", es algo similar pero con la base. Osea que sea cuestion de clicks, "poneme la estructura de la base a como estaba el 18/05/2013 en la rev xxxx" similar a como hago con el codigo

Pues igual, solamente debes ir guardando cada cambio en el script de la estructura. Así podrás obtener cualquier versión de cualquier fecha.
Es más, si tienes el script conjuntamente con el código, se comportará igual, como un fichero más, y podrás ver las diferencias que citas.

mamcx 28-07-2016 21:55:56

SI lo que te hace falta es poder visualmente (GUI) hacer eso, entonces busca un cliente de git. Yo uso:

https://www.sourcetreeapp.com/

Tambien hay otros clientes. Especializado en diff este es uno muy bueno:

https://www.perforce.com/product/com...and-diff-tools

AgustinOrtu 28-07-2016 23:51:06

Encontre esta utilidad: Open DBDiff que funciona solo con SQL Server (2005+). Es libre (GPL2) y hace su trabajo. Es facil, rapido y efectivo

Simplemente seleccionamos las 2 bases de datos (que pueden estar en dos server distintos, osea, me puedo conectar remoto) ponemos comparar y te muestra tanto en gui como en script las diferencias. Luego hasta tiene un botoncito mas que actualiza todo. Una joya.

Neftali [Germán.Estévez] 29-07-2016 08:12:19

Cita:

Empezado por Casimiro Notevi (Mensaje 507256)
El ibexpert tiene esta opción:


Creo recordar que sólo está en la versión de pago, no en la personal.
¿Cierto?

Casimiro Notevi 29-07-2016 10:24:09

Cita:

Empezado por Neftali (Mensaje 507273)
Creo recordar que sólo está en la versión de pago, no en la personal.
¿Cierto?

Yo tengo una versión que se llama "Portable" y trae esa opción. En la web de ellos veo que ya no existe esa versión.

Neftali [Germán.Estévez] 29-07-2016 11:43:53

Cita:

Empezado por Casimiro Notevi (Mensaje 507274)
Yo tengo una versión que se llama "Portable" y trae esa opción. En la web de ellos veo que ya no existe esa versión.

:cool::cool:
No me suena esa versión.
¿Trae opciones de Debug (ejecutar paso a paso)?

Casimiro Notevi 29-07-2016 12:00:57

Cita:

Empezado por Neftali (Mensaje 507275)
:cool::cool:
No me suena esa versión.
¿Trae opciones de Debug (ejecutar paso a paso)?

Sí tiene esa opción. Es una versión de 2009 y aparentemente no tiene registro ni licencia extraña, es solo un ejecutable, sin nada más.

Edito: ¡Oh, wait!, tiene un logo semitransparente en el que no me había fijado antes... no sé.


La franja horaria es GMT +2. Ahora son las 08:09:29.

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