Estoy buscando una herramienta o un proyecto de código abierto que pueda generar scripts de actualización de bases de datos de la siguiente manera:
Actualmente necesito hacer esto para una base de datos de SQL Server.
El propósito de esta herramienta sería sincronizar periódicamente la estructura de la base de datos entre múltiples instancias.
Es preferible Windows. Cuanto más barato mejor (obviamente), idealmente me gustaría encontrar un proyecto de código abierto que haga algo similar. Pero no tengo ningún límite de precio fijo.
No, no existe ninguna herramienta para hacer todo lo que pides, ni con un 100% de éxito ni con una cobertura completa.
Las piezas que faltan, es decir, los objetos agregados más tarde en una de las instancias, son bastante difíciles. Pero alteraciones como nombres cambiados, tipos de datos alterados, columnas o tablas eliminadas, etc., hacen imposible la comparación periódica con la sincronización.
La comparación de dos estructuras de bases de datos a veces se denomina comparaciones "diff" o "diffing" como en las características de detección de diferencias de los editores de texto y procesadores de texto que comparan documentos.
Estas herramientas son específicas para productos de bases de datos particulares, ya que cualquier implementación de un producto de base de datos real supera con creces el alcance del estándar SQL. Y, por lo que he visto, ninguna de estas herramientas está completa al 100% debido a las complejidades en la implementación de un sistema de base de datos.
Estas herramientas pueden generar un informe de la diferencia. Y algunas herramientas pueden generar SQL para crear objetos definidos en uno pero que no tienen en el otro. Pero le advierto que no considere tales informes o SQL como perfectos o completos.
La gestión de los cambios realizados en la estructura de su base de datos a lo largo del tiempo se denomina herramienta de migración de base de datos . El propósito es hacer evolucionar su esquema de base de datos de manera fácil y confiable en todas sus instancias.
Dos buenos en el mundo de Java son:
La forma más fácil de usar una herramienta de este tipo es al principio de la base de datos. Luego registra cada modificación del esquema de la base de datos como scripts SQL. Primero se crea una tabla adicional para registrar un número de versión. Los scripts se pueden ejecutar en cualquier instancia de base de datos para actualizar su esquema.
Y también hay formas de usar una herramienta de este tipo en bases de datos existentes.
Recomiendo encarecidamente la comparación de SQL de Redgate:
http://www.red-gate.com/products/sql-development/sql-compare/
Parece tener las características que necesita. Otra de sus herramientas, 'multi script', permitiría la implementación en múltiples instancias:
http://www.red-gate.com/products/dba/sql-multi-script/
Los hemos estado usando por un tiempo y han sido sólidos como una roca y bastante fáciles de entender.
Un poco tarde, pero agregaré mi consejo solo para que conste: https://www.schemacrawler.com/
Sin embargo, no hará la generación de SQL, tendría que hacerlo usted mismo.
He usado su salida (así como la información de reflexión de las entidades JPA) como entrada a JGraphT (crear gráfico FK) para usar la clasificación topológica para averiguar dónde comenzar a eliminar filas sin romper las restricciones FK. En un mundo de base de datos perfecto, supongo que la eliminación en cascada resolvería el problema, pero...
holdenmcgrohen
ALTER TABLE xxx ADD COLUMN yyy
). Quiero poder generar automáticamente un único script SQL que actualice cualquier base de datos a la estructura de mi base de datos local (pseudocódigo:)IF COLUMN xxx.yyy NOT EXISTS THEN ALTER TABLE xxx ADD COLUMN yyy
. Entiendo que dicha estrategia de actualización no funcionará en el 100% de los casos, pero será suficiente para mis necesidades.albahaca bourque