Nos últimos dois meses, mais ou menos, tenho procurado soluções ou práticas para lidar com o gerenciamento de versões nos bancos de dados. Estou procurando o que as pessoas veem como o melhor processo para lidar com isso.
Temos 3 ambientes para nossos bancos de dados:
- Desenvolvimento
- Teste de aceitação do usuário (UAT)
- Produção
O problema é que às vezes estamos fazendo alterações em várias coisas em nosso banco de dados de desenvolvimento e, quando chega a hora de implantar, alguns dos recursos podem não estar prontos para serem liberados no UAT.
Recentemente, começamos a usar o controle Red Gate SQL Source para armazenar todas as nossas entidades (com confirmações regulares).
Eu estava pensando em basear-me nos conjuntos de alterações (ou seja, dizer que tudo, desde o conjunto de alterações X e o retorno agora estão sendo enviados para o UAT), no entanto, isso significa que as pessoas estão apenas verificando seu código no controle de origem antes de fazer uma implantação que pode ser confusa ( especialmente porque as pessoas esquecem). Outro problema com a abordagem do conjunto de alterações é se houver um bug em um procedimento armazenado que precise ser corrigido, o número do conjunto de alterações acabaria fora do escopo do nosso conjunto de alterações máximo para a revisão, tornando-o, portanto, necessário. Para recriar o banco de dados a partir de um conjunto de alterações máximo, enviaríamos o bug novamente.
Alguma sugestão sobre um processo?
obrigado
fonte
Respostas:
Migrações
Um para cima e para baixo, que estão no seu repositório e marcados junto com seu aplicativo.
Você pode até fazer bricolage com sqf flatfiles que modificam seu esquema e atualizam a versão do esquema. Tudo o que você realmente precisa fazer é:
Bem, você pode fazer alterações no desenvolvimento no desenvolvimento, mas sempre deve surpreender o banco de dados e reconstruí-lo com migrações depois de capturar a alteração.
fonte
Fonte de controle!
Você não implanta seus binários de desenvolvimento diretamente na produção sem passar por svn / git / p4. Então, por que seus bancos de dados fazem isso sozinhos? Obtenha instâncias privadas para os desenvolvedores testarem suas alterações locais, mas quando precisar ir para o banco de dados de desenvolvimento, ele precisará passar pelos arquivos ddl verificados. Você pode até escrever ferramentas para aplicar essas alterações ddl automaticamente (não conheço nenhuma maneira de fazer isso corretamente).
Depois que você tiver as restrições em torno das alterações do esquema db (não há mais sqlplus -> emitir ddl!) E tiver um controle estrito da conta (sem acesso ddl a todos), isso deverá se tornar mais gerenciável.
fonte
Seguindo a sugestão de usar migrações ... talvez use um O / RM que ofereça suporte a migrações como Ruby on Rails e Entity Framework 4.3 O problema com ambas as abordagens, porém, é que uma migração é tudo ou nada. Você não pode (geralmente) selecionar quais migrações são aplicadas como você pode em termos de conjuntos de alterações.
Outra opção viável (se você está na pilha da Microsoft, nunca mencionou a plataforma) é gerenciar seu SQL com as ferramentas de banco de dados do Visual Studio. Ele foi incorporado na refatoração (renomear / remover colunas, etc.) e faz a verificação do modelo. Se, por exemplo, um processo armazenado fizer referência a uma coluna que não está mais lá, ele será informado.
fonte