Base de Datos de Gestión del Cambio - Configuración para crear secuencias de comandos iniciales, Scripts de migración posteriores

StackOverflow https://stackoverflow.com/questions/2503696

Pregunta

Tengo un flujo de trabajo de gestión del cambio de base de datos en su lugar. Se basa en secuencias de comandos SQL (así, no es una solución basada en código administrado).

Las miradas de configuración básica de esta manera:

Initial/
    Generate Initial Schema.sql
    Generate Initial Required Data.sql
    Generate Initial Test Data.sql
Migration
     0001_MigrationScriptForChangeOne.sql
     0002_MigrationScriptForChangeTwo.sql
     ...

El proceso para hacer girar una base de datos es a continuación, ejecutar todos los scripts Initlal y ejecute los scripts de migración secuenciales. Una herramienta toma caso de los requisitos de versiones, etc.

Mi pregunta es, en este tipo de configuración, es útil mantener también esto:

Current/
    Stored Procedures/
        dbo.MyStoredProcedureCreateScript.sql
        ...
    Tables/
        dbo.MyTableCreateScript.sql
        ...
    ...

Por "esto" me refiero a un directorio de secuencias de comandos (separadas por tipo de objeto) que representa el crear secuencias de comandos para hacer girar el actual / última versión de la base de datos.

Por alguna razón, me gusta mucho la idea, pero no puedo justificar concretamente que de necesidad. Me estoy perdiendo algo?

Las ventajas serían:

  • Para dev y control de código fuente, que tendría la misma configuración de objeto-por-archivo que estamos acostumbrados a
  • Para el despliegue, que puede girar un nuevo DB de instancia a la última versión, ya sea mediante la ejecución de la inicial + migrar o mediante la ejecución de los scripts de corriente /
  • Para dev, no necesitamos una instancia de base de datos se ejecuta con el fin de hacer el desarrollo. Podemos hacer el desarrollo de "fuera de línea" en la Corriente / carpeta.

Las desventajas serían:

  • Para cada cambio, necesitamos actualizar las secuencias de comandos en la Corriente / carpeta, así como crear un script de migración (en la migración / carpeta)

Gracias de antemano por cualquier entrada!

¿Fue útil?

Solución

En realidad, esta es la mejor manera. Tan complicado como puede parecer, es mejor que las alternativas de uso de SQL comparar como herramientas o implementación de archivos .schema VSDB. He sostenido por exactamente el enfoque SMAE desde hace algún tiempo: Versión control y su base de datos . Mis aplicaciones implementar el esquema v1 del guión inicial, a continuación, ejecutar comandos de actualización para cada versión. Cada guión know cómo actualizar desde la versión N-1 a N, y sólo eso. El resultado final es la versión actual.

El mayor inconveniente es la falta de un archivo .sql autorizada también buscar para localizar el actuales versión de cualquier objeto (procedimiento, tabla, vista, etc). Pero las ventajas de ser capaz de desplegar su aplicación sobre cualquier versión anterior, y la ventaja de desplegar por bien controlado y probado guiones son muy superiores a la desventaja.

(. Script para implementar v1 a continuación, aplicar v1.1, v1.2 entonces ... hasta que finalmente se aplica v4.5, actual)

Si se siente mal por el uso de este proceso de implementación a continuación, tenga esto en cuenta: exactamente el mismo proceso es utilizado por SQL Server internamente para actualizar la base de datos entre versiones. Cuando se adjunta una base de datos anterior, se ve la famosa 'base de datos se está ejecutando la actualización de la versión 611 a 612' y se ve que la actualización va paso a paso , no actualiza directamente a la versión actual 651 ( o lo que es actual en su caso). Tampoco la actualización ejecuta una herramienta de diferencias para desplegar v 651 v sobre. 611. Esto es debido a que el mejor enfoque es el que acaba de utilizar, actualizar un paso en en el tiempo.

Y para añadir una respuesta real a su pregunta, después de registrar una queja en lugar oblicua (es un tema que tengo fuertes opiniones acerca, lo sabe?): Creo que es valioso tener una versión con guión de la versión actual, pero Creo que debe ser un entregable integración de los procesos de construcción contigua. En otras palabras, el servidor de compilación debe construir la base de datos actual (utilizando los scripts de actualización) y luego, como un paso de generación, la escritura a cabo la base de datos y producir una caída de la estructura con la secuencia de comandos versión del esquema actual. Pero aquellos debe ser utilizado como referencia para la búsqueda y la inspección de código, no como un entregable despliegue, mi 2C.

Otros consejos

creo que sólo hará las cosas más complejas en el largo plazo. versiones completas tienen que vivir en una única secuencia de comandos para que pueda probar que la escritura en un contexto y saber que va a funcionar correctamente en otro contexto como el de producción.

Martin,

Si estás en el mundo real, entonces su base de datos de producción sólo acepta actualizaciones - nunca se "crea" a partir de cero. Así que lo más importante para usted a almacenar, ver, revisar, etc., es el conjunto de scripts de actualización. Esos son los scripts que hacen a la producción, por lo que estos son los únicos de importancia real.

Lo estás haciendo lo correcto, haciéndolos primaria. Pero las necesidades de los desarrolladores ser capaz de obtener una "imagen actual" de lo que les gusta la apariencia de esquema. DBA gusta hacer esto, también, a pesar de que (también) con frecuencia lo hacen por la tala en los servidores de producción y el despido de algún tipo de herramienta de interfaz gráfica de usuario. (Uff!)

La única reserva que tengo acerca de su enfoque es la corriente / esquema anterior por tipo de objeto . Esas secuencias de comandos deben ser generados de forma automática, desde el vertido de la propia base de datos. Si se puede clasificar de forma automática por tipo, entonces genial! Si no es así, haga lo que pueda para que sean fáciles de navegar, pero el principio rector debe ser siempre "genera automáticamente a partir de una base de datos activa."

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top