Pergunta

O sistema de software em que trabalho é um sistema de cobrança médica, grandes quantidades de tabelas de dados e dados e procedimentos armazenados.

Eu estava lendo o artigo "12 etapas para melhor codificar"E no teste de Joel #2 estados: você pode fazer uma construção em uma etapa?

Agora eu estava me perguntando, isso significa que a implantação é a construção (para que um cliente possa atualizar sua implantação).

Agora, o principal problema que estou atropelando é como você faz uma atualização de um banco de dados de uma etapa?

No momento atual, quando fazemos alterações em um banco de dados, todas as alterações são gravadas e adicionadas a um script de atualização do banco de dados, que recebe um número de versão anexado a ele quando uma implantação para a compilação do cliente é criada.

Existe uma maneira mais simples de fazer isso? Algum script ou aplicativo lá fora, que pega um esquema de "antes e depois" para um esquema de banco de dados e cria um script de atualização como eu mencionei?

Ou é assim que todos fazem isso, o que eu acho difícil de acreditar, mas plausível.

Um sistema automatizado diminuiria consideravelmente os erros e aceleraria os tempos de criação de implantação, e eu estaria interessado em saber como fazê -lo.

Foi útil?

Solução

Existem vários níveis de complexidade pelos quais você pode passar:

  • Se você tem scripts de atualização que cria manualmente e está apenas procurando uma maneira de aplicá -los facilmente a vários servidores, confira o SSW SQL Implement pela SSW Consulting. Pode lidar com esse cenário muito bem

  • Se você tende a fazer mais uma abordagem de diferença de banco de dados, então o Red Gate's SQL Compare (já mencionado) e SQL Packager Faça uma ótima combinação. Você pode diferenciar o banco de dados entre antigo e novo e depois aplicar as alterações em um bom pacote - como um exe ou um projeto C#

  • Se você quer uma abordagem real, de ponta a ponta e bem pensada (com um pouco de curva de aprendizado), confira DBGHOST da Innovartis abordagem. É uma metodologia / técnica inteira como lidar com o desenvolvimento do banco de dados e atualizações incrementais. É muito poderoso e parece muito promissor-mas é uma abordagem um pouco ou nada: você compra e o usa de ponta a ponta, ou você não

Espero que isso ajude um pouco!

Outras dicas

Redgate tem uma ferramenta SQL Compare Para comparar bancos de dados e gerar um script para sincronizar. Costumávamos usá -lo, mas mais recentemente mudou para scripts manuais usando o mesmo processo que você descreve. O uso de scripts manuais, de grão fino, com um número de versão exclusivo, funcionou bem.

Temos nossos scripts de atualização integrados aos testes de unidade para que eles sejam testados junto com o código como parte da integração contínua. Eu acho que essa é uma parte importante para "fazer uma construção em um passo".

Dê uma olhada nesta postagem do blog. Eu usei esse tipo de script de atualização única de qualquer versão do banco de dados em alguns projetos e funciona bem.

http://blogs.msdn.com/danhardan/archive/2007/03/30/database-change-scripts-mambo-style.aspx

Você pode precisar ajustar um pouco o fluxo de trabalho para se ajustar ao seu fluxo de trabalho e/ou atualizar o arquivo .SQL do modelo, mas no geral achei a idéia uma abordagem bastante sólida para as implantações do banco de dados.

EDIT: Apenas para elaborar como usei essa técnica. Basicamente, todos os meus scripts de revisão do banco de dados são colocados no controle de origem. Em seguida, como uma etapa de compilação de postagem na caixa de compilação, essa ferramenta Mambo é executada no diretório de scripts para rolar os scripts em um único script incluído por uma transação para permitir reversão, se algo for errado. Em seguida, o instalador é inteligente o suficiente para procurar o script .SQL para executar no banco de dados existente.

A razão pela qual isso funciona é porque o script enrolado verifica para ver cada peça que era um script individual já foi executado no banco de dados desejado. Como resultado, apenas os scripts mais recentes são executados. Uma advertência disso é que, uma vez que um script é verificado no controle da fonte e foi implantado, você não pode editá -lo, pois a tabela de rastreamento já acha que o script foi executado. Tudo bem para os projetos em que trabalhei porque apenas adicionamos outro script à pasta Scripts.

Espero que esteja explicando o processo o suficiente para entender. Realmente não é tão complexo e pode ser bastante útil se a abordagem for aplicável ao seu projeto.

Responda à primeira pergunta de "Agora eu queria saber: isso significa a criação de implantação (para que um cliente possa atualizar sua implantação)?"

Acredito que o JOEL TEST #2 não é para movimentos de implantação para Prod, mas para a intergração do Continuios durante o desenvolvimento.

Quanto às alterações no banco de dados no Prod, todas elas devem ser feitas através de um script como parte de um lançamento de transações ou após o backup do banco de dados. Você sempre deseja poder navegar de volta, caso algo falhe no lançamento.

Desenvolva seu banco de dados como um conjunto de patches que dependem um do outro. Em seguida, use uma ferramenta como https://github.com/luvdasun/sqlpatch (por mim) para criar um arquivo SQL para implantação.

O SQLPatch classificará os patches na ordem certa e garantirá que cada patch seja executado exatamente uma vez, mesmo que o mesmo script seja executado duas vezes.

Essa estratégia pode ser usada para implantação do seu banco de dados em um ambiente de CI/CD. Isso torna a implantação tão fácil quanto empurrar para uma filial.

Existem aplicativos que sincronizam bancos de dados, mas acho que é melhor fazer o que está fazendo. Escrever um script para atualizar um banco de dados oferece a capacidade de lidar com erros e executar transações. Isso é considerado prática recomendada.

A própria Microsoft introduziu Aplicativos de camada de dados no SQL 2012 como uma opção gratuita para implantar e atualizar bancos de dados.

Eu uso e gosto desta ferramenta, inclusive para implantações de produção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top