2009-12-22 15 views
19

El sistema de software en el que trabajo es un sistema de facturación médica, grandes cantidades de datos y tablas de datos, y procedimientos almacenados.¿Cuál es una manera fácil de implementar cambios en la base de datos usando SQL Server?

Estaba leyendo el artículo "12 Steps to Better Code" y en los estados de The Joel Test # 2: ¿Se puede construir en un solo paso?

Ahora me preguntaba si esto significa una implementación (para que un cliente pueda actualizar su implementación).

Ahora el problema principal que estoy corriendo, es ¿cómo se hace una actualización de base de datos de un paso?

En la actualidad, cuando realizamos cambios en una base de datos, todos los cambios se registran y agregan a una secuencia de comandos de actualización de base de datos, que obtiene un número de versión cuando se crea una implementación en la creación del cliente.

¿Hay una manera más simple de hacer esto? ¿Algún script o aplicación por ahí que toma un "antes y después" de un esquema de base de datos y crea un script de actualización como lo mencioné?

O esta es la forma en que todos lo hacen, lo que me resultaría difícil de creer, pero plausible.

Un sistema automatizado reduciría los errores y aceleraría considerablemente los tiempos de creación de la implementación, y me interesaría saber cómo hacerlo.

Respuesta

14

Hay varios niveles de complejidad que puede ir a través de:

  • si tiene scripts de actualización que se crean de forma manual, y sólo están buscando una manera de aplicar fácilmente aquellos a varios servidores, visita nuestra SSW SQL Deploy por SSW Consulting. Puede manejar ese escenario muy bien

  • si tiende a hacer más de un enfoque de diferencia de base de datos, entonces el SQL Compare de Red Gate (ya mencionado) y SQL Packager hacen un gran combo. Puede diferenciar la base de datos entre antigua y nueva y luego aplicar los cambios en un paquete agradable - como un proyecto EXE o C#

  • si desea un enfoque real, integral y bien pensado (con poco de una curva de aprendizaje), consulte Innovartis' DBGhost enfoque. Es toda una metodología/técnica cómo manejar el desarrollo de la base de datos y las actualizaciones incrementales. Es muy potente y parece muy prometedor - pero es un poco de un enfoque de todo o nada: o bien comprar en ella y utilizarla de extremo a extremo, o no se tiene

Espero que esto ayude ¡un poco!

+2

Utilicé DbGhost durante 10 años y siempre funcionó. El apoyo que brindan es insuperable. – penderi

+0

Es 2013 ahora. Cualquier actualización en este campo? – ysrb

+1

@ysrb: bueno, está el [SQL Server Data Tools] (http://msdn.microsoft.com/en-us/data/tools.aspx) dentro de Visual Studio 2012/2013 que parecen automatizar muchas de esas tareas de forma predeterminada (si está usando Visual Studio, es decir) –

2

Echa un vistazo a esta publicación de blog. He usado este tipo de script de actualización única desde cualquier versión de DB en un par de proyectos y funciona muy bien.

http://blogs.msdn.com/danhardan/archive/2007/03/30/database-change-scripts-mambo-style.aspx

Es posible que tenga que ajustar el flujo de trabajo un poco para adaptarse a su flujo de trabajo y/o actualizar el archivo .sql plantilla, pero en general me he encontrado la idea de ser un enfoque bastante sólido para las implementaciones de DB.

EDITAR: Solo para explicar cómo utilicé esta técnica. Básicamente, todos mis scripts de revisión DB se ponen en control de fuente. Luego, como un paso posterior a la compilación en el cuadro de compilación, esta herramienta Mambo se ejecuta en el directorio de scripts para convertir los scripts en un solo script abarcado por una transacción para permitir la reversión si algo sale mal. Entonces, el instalador es lo suficientemente inteligente como para buscar el script .sql para ejecutar contra la base de datos existente.

La razón por la que esto funciona es porque el guión enrollado comprueba que cada pieza que era un guión individual ya se ejecutó contra la base de datos deseada. Como resultado, solo se ejecutan los últimos scripts. Una advertencia a esto es que una vez que una secuencia de comandos se registra en el control de origen y se ha implementado, no puede editarlo ya que la tabla de seguimiento ya piensa que la secuencia de comandos se ha ejecutado. Eso está bien para los proyectos en los que he trabajado porque simplemente agregamos otro script a la carpeta de scripts.

Espero que explique el proceso lo suficientemente bien como para entenderlo. Realmente no es tan complejo y puede ser bastante útil si el enfoque es aplicable a su proyecto.

1

Responda a la primera pregunta de "Ahora me preguntaba, ¿significa esto implementación (para que un cliente pueda actualizar su implementación)?"

Creo que Joel Test # 2 no es para los movimientos de despliegue a prod, sino para la integración continua durante el desarrollo.

En cuanto a los cambios de la base de datos en prod, todos deben hacerse a través de una secuencia de comandos como parte de una implementación de la transacción o después de la copia de seguridad de la base de datos.Siempre desea poder navegar de nuevo si algo falla en el despliegue.

+0

(+1) buena respuesta. Para implementar esto, necesita números de versión para su estado de base de datos, un estado base y scripts para hacer y deshacer cambios en los objetos de la base de datos. –

+0

Aunque no son perfectas, las migraciones de carriles lo hacen bastante bien –

0

Existen aplicaciones que sincronizan bases de datos, pero creo que será mejor que haga lo que está haciendo. Escribir un script para actualizar una base de datos le brinda la capacidad de manejar errores y ejecutar transacciones. Esto se considera mejor práctica.

2

redgate tiene una herramienta SQL Compare para comparar bases de datos y generar una secuencia de comandos para sincronizar. Solíamos usarlo, pero más recientemente cambiamos a scripts manuales usando el mismo proceso que describes. El uso de scripts manuales de grano fino con un número de versión único ha funcionado bien.

Tenemos nuestros scripts de actualización integrados en pruebas unitarias para que se prueben junto con el código como parte de la integración continua. Creo que esta es una parte importante de "hacer una compilación en un solo paso".

1

Desarrolle su base de datos como un conjunto de parches que dependen unos de otros. Luego use una herramienta como https://github.com/LuvDaSun/sqlpatch (por mí) para construir un archivo sql para la implementación.

sqlpatch ordenará los parches en el orden correcto y se asegurará de que cada parche se ejecute exactamente una vez, incluso si el mismo script se ejecuta dos veces.

Esta estrategia se puede utilizar para el despliegue de su base de datos en un entorno ci/cd. Esto hace que la implementación sea tan fácil como empujar a una sucursal.

0

Microsoft presentó Data-tier applications en SQL 2012 como una opción gratuita para implementar y actualizar bases de datos.

Uso y me gusta esta herramienta, incluso para despliegues de producción.

Cuestiones relacionadas