El fondoSQL
Mi grupo tiene bases de datos del servidor 4 de SQL:
- Producción
- UAT
- prueba
- Dev
Trabajo en el entorno de desarrollo. Cuando llega el momento de promocionar los objetos en los que he estado trabajando (tablas, vistas, funciones, procesos almacenados) hago una solicitud a mi gerente, quien promueve la prueba. Después de las pruebas, envía una solicitud a un administrador que promueve a UAT. Después de una prueba de usuario exitosa, el mismo administrador promueve la producción.
El problema
Todo el proceso es incómodo para algunas razones.
- Cada persona debe rastrear manualmente sus cambios. Si actualizo, agrego, elimino cualquier objeto que necesite para rastrearlos para que mi solicitud de promoción contenga todo lo que he hecho. En teoría, si me pierdo algo de prueba o UAT debería atraparlo, pero esto no es seguro y es una pérdida de tiempo del probador, de todos modos.
- Muchos de los cambios que hago son iterativos y se realizan en una GUI, lo que significa que no hay registro de los cambios que hice, solo el resultado final (al menos hasta donde yo sé).
- Estamos en las primeras etapas de construir un data mart, por lo que la mayoría de los cambios realizados, al menos en cuanto a conteo, son cosas menores: cambiar el tipo de datos para una columna, alterar los nombres de las tablas como cristalizamos lo que van a ser usados para, ajustar las funciones y procedimientos almacenados, etc.
La pregunta
gente ha estado haciendo este tipo de trabajo durante décadas, así que imagino que tienen que ser una forma mucho mejor de administrar el proceso. Lo que me gustaría es si pudiera ejecutar un diff entre dos bases de datos para ver cómo la estructura era diferente, usar ese diff para generar un script de cambio, usar ese script de cambio como mi solicitud de promoción. es posible? Si no, ¿hay otras formas de organizar este proceso?
Para el registro, somos una tienda 100% de Microsoft, acaba de actualizar todo a SQL Server 2008, por lo que cualquier herramienta disponible en ese paquete sería juego limpio.
Debo aclarar que no necesariamente estoy buscando herramientas de diff. Si esa es la mejor manera de sincronizar nuestros entornos, está bien, pero si hay una mejor manera de hacerlo.
Un ejemplo de lo que realmente quiero hacer son las migraciones en Ruby on Rails. Sintaxis simple muerta, todos los cambios están bien documentados automáticamente y de forma predeterminada, determinar qué migraciones deben ejecutarse es casi trivialmente fácil. Me encantaría que hubiera algo similar a esto para SQL Server.
Mi solución ideal es 1) fácil y 2) difícil de estropear. Las migraciones de Rails son ambas; todo lo que he hecho hasta ahora en SQL Server es ninguno de los dos.
El uso de scripts para actualizar la base de datos y hacer un seguimiento manual de los guiones de actualización es exactamente el tipo de situación que estaba tratando de evitar . – kubi
No 'rastrea' las actualizaciones. Usted trata las actualizaciones de la base de datos como mejoras y características del código. Considera los scripts como parte del árbol de fuentes, y los trata como fuente, y los controla en el control de versiones como fuente, los revisa como fuente, etc. Del mismo modo que no evita escribir los archivos .cs de su proyecto. –