¿RedGate SQL Source Control para mí?

Acabo de henetworkingar una database de SQL Server. Una de las cosas que tendré que resolver es la creación de versiones y comstackciones automáticas.

Se ha sugerido que debería pensar seriamente en recomendar RedGate SQL Compare, pero debo admitir que estoy un poco incómodo al respecto.

Mis reservas son …

  • parece promover el uso de las herramientas gui para el trabajo db?
  • para las aplicaciones en vivo, prefiero trabajar con scripts de cambio, esto evita el pánico de último momento para crear scripts de migration al final de cada ciclo de scrum, y significa que el CI puede probar sus scripts de actualización. No puedo ver cómo la herramienta RedGate aborda esto.

Mi instinto me dice que me quede con el enfoque probado de un file MSBuild y una stack de files .SQL.

Me interesaría saber si alguien tiene alguna experiencia en el uso de esta herramienta.

Usamos Red Gate para generar scripts para la implementación y para controlar el control de versiones.

"Despliegue" y "control de versiones" son problemas separados para el código SQL.

Importante: su database de producción es maestra con todos sus datos. Así que organice copys regulares en un server de testing y utilícelas como reference. Una database generada por NUnit cada noche con datos básicos (la he visto, se ha echado a reír) es generalmente inútil. ¿Qué sucede si tiene mil millones de filas y necesita probar una consulta en su contra?

Versiones: puede usar las herramientas de Red Gate para generar un esquema como reference y luego compararlo con esta copy (o su QA o lo que sea). Las herramientas de Red Gate permiten la comparación con una carpeta, que está bajo control SVN en nuestro caso y se actualiza cada versión. Entonces tenemos un historial completo de cada object

Despliegue: aplicamos nuestras secuencias de commands de desarrollo (también en SVN) contra una database "compilation" limpia y la comparamos con otra database limpia. Esto se convierte en nuestro script de deployment.

Esto es bastante simplificado, por supuesto.

La versión pro ofrece una API para sincronizar y comparar para que pueda integrarse en su cadena de herramientas si es necesario. No se necesita GUI. Incidentemente, usamos esto para proporcionar una synchronization de un clic de algunos sandboxes de usuario especiales completos con código de cliente.

Como mencionó Remus, no son infalibles para algunas operaciones. Si cambias cosas en tablas de 1.5TB, codificaría mi script a mano. Otra irritación es que la herramienta de Red Gate tiene la costumbre de eliminar SCHEMABINDING en una vista relacionada o udf para un cambio de limitación de verificación simple.

También recomiendo leer el "Evolutionary Database Design" de Martin Fowler para get inspiración.

También preferiría las secuencias de commands: fácil de almacenar en control de código fuente (CVS, Git, etc.) para que pueda ver cuándo se hicieron los cambios.

No confío en las herramientas basadas en diferencias para la implementación. Y eso incluye los files vsdbcmd .schema, ya que también están basados ​​en diferencias. La última vez que traté de usar una herramienta diff me ofrecí alegremente cambiar una tabla de 1.5 TB mediante copyr / soltar / cambiar el nombre …

Mi enfoque es usar siempre las secuencias de commands de actualización que muevan el esquema implementado de v. N a v. N+1 . De esta forma sé exactamente cómo se realiza la actualización, y si una operación no es posible (requeriría una operación de copy de tamaño de datos de 2 semanas …) entonces sé que no puedo hacerlo y planifico mis cambios de código para el lanzamiento de v. Siguiente en consecuencia.

Tengo un proyecto de set de herramientas de código abierto (con licencia de LGPL) que trata de resolver los problemas relacionados con el control de versiones de esquema DB adecuado (y más) SQL Server ( 2005/2008 / Azure), el bsn ModuleStore .

Básicamente, la parte independiente del set de herramientas codifica los objects DB de SQL Server de un esquema DB en files con un formatting estándar aplicado, de modo que el contenido del file solo cambia si el object realmente cambió (muy en contraste con los scripts realizados por VS , que también progtwig una date de escritura, marcando todos los objects como cambiados incluso si son de hecho idénticos).

Pero el set de herramientas va más allá si usa .NET: le permite incrustar los scripts SQL en la biblioteca o aplicación (como resources integrados) y luego hacer que compare los scripts embeddeds con el estado actual en la database. Los cambios no relacionados con la table (aquellos que no son "cambios destructivos" según la definición de Martin Fowler ) pueden aplicarse automáticamente o bajo petición (por ejemplo, crear y eliminar objects como vistas, funciones, procedimientos almacenados, types, índices) y cambiar los scripts (que deben escribirse manualmente) se pueden aplicar también en el mismo process; también se crean nuevas tablas, opcionalmente junto con sus datos de configuration. Después de la actualización, el esquema DB se compara de nuevo con los scripts para garantizar una actualización correcta de DB antes de confirmar los cambios.

Tenga en count que todo el código de scripting y comparación funciona sin SMO, por lo que no tendrá la dolorosa dependencia de SMO cuando utilice el bsn ModuleStore en las aplicaciones.

Dependiendo de cómo quiera acceder a la database, el set de herramientas ofrece aún más: implementa algunas capacidades ORM y ofrece un enfoque basado en interfaz muy útil y útil para invocar procedimientos almacenados, incluyendo soporte transparente para XML con classs nativas .NET XML y también para TVP (Parámetros con valores de tabla) como IEnumerable<PocoClass> .

SQL Compare puede generar un script de migration SQL que se puede revisar independientemente antes de aplicarlo, pero también le da la opción de ejecutar el script dentro de la herramienta. Red Gate recomienda usar el método anterior al implementar en bases de datos de producción.

Para el control de versiones de la database, SQL Source Control es compatible con la mayoría de los sistemas de control de origen (por ejemplo, SVN, TFS, etc., aunque el soporte de VSS ha quedado obsoleto). Existe, en v3, una opción para vincular a una carpeta de trabajo, lo que le permite usar su propio cliente de control de versiones si así lo desea.

Usamos una herramienta de comparación como parte de nuestro process de implementación para ver si falta algo que necesite un script y luego discutirlo con el desarrollador si es así (generalmente es una diferencia que no está registrada en la location de destackción porque no debería ' t se mueve para ir a prod). Pero implementamos desde scripts que están en control de fuente siempre. Si confía en SQL Compare o en cualquier otra herramienta de comparación, puede encontrarse moviendo cosas que aún no deben moverse.