Houve alguma discussão no wiki da comunidade SO sobre se os objetos de banco de dados devem ser controlados por versão. No entanto, não vi muita discussão sobre as melhores práticas para criar um processo de automação de construção para objetos de banco de dados.
Esse tem sido um ponto de discussão controverso para minha equipe - principalmente porque os desenvolvedores e DBAs costumam ter objetivos, abordagens e preocupações diferentes ao avaliar os benefícios e riscos de uma abordagem de automação para implantação de banco de dados.
Eu gostaria de ouvir algumas idéias da comunidade SO sobre quais práticas têm sido eficazes no mundo real.
Sei que é um tanto subjetivo quais práticas são realmente melhores, mas acho que um bom diálogo sobre qual trabalho pode ser útil para muitas pessoas.
Aqui estão algumas das minhas perguntas preliminares sobre áreas de interesse neste tópico. Não se trata de uma lista definitiva, mas sim de um ponto de partida para as pessoas entenderem o que procuro.
- Os ambientes de teste e produção devem ser criados a partir do controle de origem?
- Ambos devem ser desenvolvidos usando automação - ou a produção deve ser construída copiando objetos de um ambiente de teste finalizado e estável?
- Como você lida com as diferenças potenciais entre os ambientes de teste e produção em scripts de implantação?
- Como você testa se os scripts de implantação funcionarão de maneira tão eficaz na produção quanto no teste?
- Quais tipos de objetos devem ter controle de versão?
- Apenas código (procedimentos, pacotes, gatilhos, java, etc)?
- Índices?
- Restrições?
- Definições de tabela?
- Scripts de mudança de tabela? (por exemplo, scripts ALTER)
- Tudo?
- Quais tipos de objetos não devem ter controle de versão?
- Sequências?
- Bolsas?
- Contas de usuário?
- Como os objetos de banco de dados devem ser organizados em seu repositório SCM?
- Como você lida com coisas únicas, como scripts de conversão ou scripts ALTER?
- Como você lida com a retirada de objetos do banco de dados?
- Quem deve ser responsável por promover objetos desde o desenvolvimento até o nível de teste?
- Como você coordena as mudanças de vários desenvolvedores?
- Como você lida com a ramificação de objetos de banco de dados usados por vários sistemas?
- Que exceções, se houver, podem ser feitas razoavelmente neste processo?
- Problemas de segurança?
- Dados com problemas de desidentificação?
- Scripts que não podem ser totalmente automatizados?
- Como você pode tornar o processo resiliente e aplicável?
- Erro de desenvolvedor?
- Para questões ambientais inesperadas?
- Para recuperação de desastres?
- Como você convence os tomadores de decisão de que os benefícios do DB-SCM realmente justificam o custo?
- Provas anedóticas?
- Pesquisa da indústria?
- Recomendações de práticas recomendadas do setor?
- Apelos a autoridades reconhecidas?
- Análise de custo-benefício?
- Quem deve "possuir" objetos de banco de dados neste modelo?
- Desenvolvedores?
- DBAs?
- Analistas de dados?
- Mais de um?