PDA

Ver la Versión Completa : Bases de Datos, control de versiones


AgustinOrtu
28-07-2016, 08:54:07
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 (https://www.devart.com/dbforge/sql/source-control/)

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
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 (http://sqliteadmin.orbmu2k.de/), 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:

http://fotos.subefotos.com/35bbe4b36c09038617222cf6dfaa8959o.png

AgustinOrtu
28-07-2016, 21:12:52
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
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/components/perforce-visual-merge-and-diff-tools

AgustinOrtu
28-07-2016, 23:51:06
Encontre esta utilidad: Open DBDiff (http://opendbiff.codeplex.com/) 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
El ibexpert tiene esta opción:

http://fotos.subefotos.com/35bbe4b36c09038617222cf6dfaa8959o.png

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
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
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
: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é.