Ha habido alguna discusión en la wiki de la comunidad SO sobre si los objetos de la base de datos deben ser controlados por versiones. Sin embargo, no he visto mucha discusión sobre las mejores prácticas para crear un proceso de automatización de compilación para objetos de base de datos.
Este ha sido un punto polémico de discusión para mi equipo, particularmente porque los desarrolladores y DBA a menudo tienen diferentes objetivos, enfoques y preocupaciones al evaluar los beneficios y riesgos de un enfoque de automatización para la implementación de bases de datos.
Me gustaría escuchar algunas ideas de la comunidad SO sobre qué prácticas han sido efectivas en el mundo real.
Me doy cuenta de que es algo subjetivo qué prácticas son realmente las mejores, pero creo que un buen diálogo sobre qué trabajo podría ser útil para muchas personas.
Estas son algunas de mis preguntas teaser sobre áreas de interés en este tema. No se pretende que sean una lista definitiva, sino un punto de partida para que las personas me ayuden a comprender lo que estoy buscando.
- ¿Deben construirse tanto los entornos de prueba como los de producción a partir del control de código fuente?
- ¿Deben construirse ambos utilizando la automatización, o la producción debe construirse copiando objetos de un entorno de prueba finalizado y estable?
- ¿Cómo maneja las posibles diferencias entre los entornos de prueba y producción en los scripts de implementación?
- ¿Cómo se prueba que los scripts de implementación funcionarán con la misma eficacia en la producción que en la prueba?
- ¿Qué tipos de objetos deben controlarse por versión?
- ¿Solo código (procedimientos, paquetes, activadores, java, etc.)?
- Índices?
- Restricciones?
- Definiciones de tablas
- ¿Scripts de cambio de tabla? (por ejemplo, secuencias de comandos ALTER)
- ¿Todo?
- ¿Qué tipos de objetos no deberían controlarse por versión?
- Secuencias
- ¿Subsidios?
- ¿Cuentas de usuario?
- ¿Cómo deberían organizarse los objetos de la base de datos en su repositorio de SCM?
- ¿Cómo maneja cosas únicas como scripts de conversión o scripts ALTER?
- ¿Cómo maneja la retirada de objetos de la base de datos?
- ¿Quién debería ser responsable de promover los objetos desde el desarrollo hasta el nivel de prueba?
- ¿Cómo coordinas los cambios de varios desarrolladores?
- ¿Cómo maneja la ramificación de los objetos de base de datos utilizados por múltiples sistemas?
- ¿Qué excepciones, si las hay, pueden hacerse razonablemente a este proceso?
- ¿Temas de seguridad?
- ¿Datos con problemas de desidentificación?
- ¿Secuencias de comandos que no se pueden automatizar por completo?
- ¿Cómo puede hacer que el proceso sea resistente y ejecutable?
- ¿Al error del desarrollador?
- ¿A problemas medioambientales inesperados?
- ¿Para recuperación ante desastres?
- ¿Cómo convence a los responsables de la toma de decisiones de que los beneficios de DB-SCM realmente justifican el costo?
- ¿Evidencia anecdótica?
- ¿Investigación de la industria?
- ¿Recomendaciones de mejores prácticas de la industria?
- ¿Apelaciones a autoridades reconocidas?
- ¿Análisis coste-beneficio?
- ¿Quién debería "poseer" los objetos de la base de datos en este modelo?
- Desarrolladores?
- DBA?
- Analistas de datos?
- ¿Más de uno?