¿Cómo puede un grupo rastrear cambios en el esquema de la base de datos?

67

¿Qué metodologías de control de versiones ayudan a los equipos de personas a rastrear los cambios en el esquema de la base de datos?

Toby
fuente
¿Qué estás tratando de lograr aquí? ¿Está tratando de alertar a las personas sobre los cambios o crear una pista de auditoría de quién cambió qué y cuándo? ¿Algo más completamente?
ScottCher
@Scott: esencialmente para poder crear casi como una pista de auditoría para otros desarrolladores, por lo que sabemos que tenemos el esquema de desarrollo más actualizado y que los sitios de prueba y en vivo se pueden verificar fácilmente para ver qué esquema están ejecutando.
Toby
1
Esto es similar a la pregunta que acabo de publicar, pero creo que son lo suficientemente diferentes como para responder a ambos dba.stackexchange.com/questions/64/…
Beth Whitezel
1
@BitOff: estoy de acuerdo y creo que mi respuesta a la pregunta a la que hizo referencia también está aquí. El uso de una herramienta como PowerDesigner o ERWin puede ayudar a controlar la versión de un diseño de base de datos: si la base de datos se modela externamente y todos los cambios se planifican a través del modelo, puede controlar y difundir mejor esos cambios para su revisión.
ScottCher
1
Echa un vistazo a Liquibase o Flyway
a_horse_with_no_name

Respuestas:

44

Hace solo un par de minutos estaba comprobando esto: una tabla que debería existir en todos los proyectos con una base de datos , parece bastante simple de poner en práctica, échale un vistazo:

Se llama schema_version (o migraciones, o lo que le convenga) y su propósito es realizar un seguimiento de los cambios estructurales o de datos en la base de datos. Una posible estructura (ejemplo en MySQL) es:

create table schema_version (
     `when` timestamp not null default CURRENT_TIMESTAMP,
     `key` varchar(256) not null,
     `extra` varchar(256),
     primary key (`key`)
) ENGINE=InnoDB;

insertar en los valores de versión de esquema ( key, extra) ('001', 'versión de esquema');

Depende de usted si agrega esta tabla desde el comienzo del proyecto o justo después de haber implementado la primera versión en un servidor provisional o de producción.

Siempre que necesite ejecutar un script SQL para cambiar la estructura de la base de datos o realizar una migración de datos, también debe agregar una fila en esa tabla. Y hágalo a través de una declaración de inserción al principio o al final de ese script (que está comprometido con el repositorio de código del proyecto).

...

eiefai
fuente
1
@David: esta es casi una pregunta en sí misma, pero ¿podría explicar muy rápidamente cómo la tabla podría enviar comentarios a su VCS? ¿Solo con un volcado manual?
Toby
@Toby: con una implementación, los scripts se colocaron en SVN y el desarrollador proporcionó el rev. SVN o el error JIRA #: nosotros (dbas) insertamos sus notas rápidas y rev # en esta tabla. Sin embargo, para vincularlo, creamos una página web para señalar esta tabla con un hipervínculo a JIRA.
David Hall
Si. Básicamente, el OP lo tiene al revés: usa scripts de implementación que versiona, no trabaja desde deltas de bases de datos. De todos modos, solo funcionan en casos degenerados (simplificados): es posible que deba realizar transformaciones de varios pasos para actualizar un esquema, que una herramienta no puede generar hacia atrás. Pero los scripts de implementación pueden manejar esto.
TomTom
23

Creo que el mejor método es generar la base de datos como parte de su proceso de compilación . Mantenga todos los scripts en control de fuente con el resto del código, y todos serán responsables de sus propios entornos.

De lo contrario, RedGate tiene una herramienta para integrar el control de origen en SSMS y SQL Compare es útil para comparar / sincronizar esquemas de MS SQL Server. Visual Studio Database Edition también tiene una herramienta integrada de comparación de esquemas .

Otra pregunta SO me llevó a Migrator Dot Net, que voy a comenzar a investigar durante mi abundante tiempo libre. Parece un buen método, pero podría ser más una inversión de tiempo / gastos generales de lo que está dispuesto a hacer.

Larry Smithmier
fuente
La "edición de base de datos" de Visual Studio solía ser un producto separado, pero ahora se incluye en ediciones que incluyen Team Server. Personalmente, prefiero la herramienta RedGate (SQL Compare) para mantenerlos sincronizados.
Tangurena
12

eiefai ya mencionó una tabla que debería existir en todos los proyectos con una base de datos . Esta es una gran publicación de blog, pero en mi opinión solo va en parte a una solución de trabajo para el control de revisión de la base de datos. Creo que cualquier intento de "responder" esta pregunta en el mundo real necesita considerar alguna otra información sobre VCS y bases de datos:

TML
fuente
8

Creo que hay un par de ángulos diferentes para abordar esta pregunta. El ángulo de "herramienta primero", creo, variará según la plataforma y las preferencias personales. Caso en cuestión: estoy usando un proyecto de base de datos en MS Visual Studio, pero no estoy seguro de que sea una excelente solución para MySQL. También conozco personas que se venden bastante con sus herramientas favoritas de Redgate, Erwin, Embarcadero, etc.

También hay un ángulo de "primer proceso" para esta pregunta, que (con suerte) será revisado en este sitio en las preguntas posteriores. Las piedras angulares en este proceso son poner su esquema bajo control de origen y administrar los cambios de manera que pueda aplicar los cambios de esquema de la versión "x" a la versión "y" más o menos bajo demanda.

Una respuesta definitiva a este tema terminará pareciéndose a un libro, por lo que probablemente valga la pena comenzar haciendo referencia a uno: Redgate publicó recientemente un libro electrónico gratuito llamado " La guía de Red Gate para el desarrollo basado en equipo de SQL Server ", y aunque hay hay mucho para debatir, es un buen lugar para comenzar a debatir, en mi opinión. Contrariamente al nombre, gran parte del material de este libro es lo suficientemente general como para aplicarse a cualquier base de datos (no solo a SQL Server) y a cualquier conjunto de herramientas (no solo Redgate). Si aún no has visto esto, definitivamente vale la pena echar un vistazo, al menos.

Finalmente, probablemente valga la pena vincular en la "respuesta heredada" de stackoverflow .

D. Lambert
fuente
5

SchemaCrawler es mi herramienta para producir un archivo de texto con todos los objetos de esquema de base de datos. Diseñé esta salida de texto para que sea legible por humanos, así como diferible frente a una salida similar de otro servidor.

En la práctica, lo que he encontrado es que generar un archivo de texto del esquema de la base de datos es útil cuando se hace como parte de la compilación. De esta manera, puede verificar el archivo de texto en su sistema de control de código fuente y tener un historial de versiones de cómo ha evolucionado su esquema con el tiempo. SchemaCrawler está diseñado para automatizar esto también, desde la línea de comandos.

Sualeh Fatehi
fuente
Para ver el oráculo en code.google.com/p/oracle-ddl2svn
popalka