Pergunta

A minha necessidade é bastante básico e eu não quero reconstruir a roda. Eu gosto de roteiro meu banco de dados e ter escrito roteiros para atualizar-lo de uma versão para a próxima ou seja, 001-criar-tables.sql, 002-alter-column.sql etc.

O que eu quero é uma linha de comando ferramenta simples ou MsBuild que vai olhar para um banco de dados ver qual a versão do banco de dados está em (usando alguma convenção de mesa) e executar todos os scripts em uma pasta que tem um número maior do que o atual versão do banco de dados. Eu também gostaria que a ferramenta para reverter um script se ele falhar / gera um erro e parar nesse ponto.

Isso é o que eu gostaria, mas eu não me importo mudando meus convenções embora eu quero escrever meus próprios scripts sql. Eu também quero a ferramenta a ser fonte livre ou aberto, como eu não precisa de muito. Como meus projetos são C # eu preferiria a ferramenta ser construída em .Net

Foi útil?

Solução 7

OK então eu não sabia como qualquer uma das opções que eu achei lá fora. Eu encontrei algumas boas ferramentas para criar os scripts, mas nada que acompanham a versão do banco de dados e executar os novos scripts. De qualquer forma eu fui em frente e rolou minha própria ferramenta Open Source para começar o trabalho feito. Se você quiser usá-lo você pode baixar se do CodePlex seu chamado KissDB . Eu também joguei um post sobre isso no meu blog blog.RunXc

Outras dicas

Você olhou para Abrir DBDiff ainda? Pode ser um bom lugar para começar.

Se você mudar de idéia sobre código aberto, SQL do Red Gate Compare é o caminho a percorrer IMO.

Há um projeto muito interessante chamado SQLRunner no SourceForge - é C #, é .NET, é passado "pré-alfa" :-)

Eu não usei-me, mas ainda -. Parece muito bom, IMHO

Marc

Este é um problema difícil, pura e simples. As ferramentas mencionadas em outras respostas pode definitivamente ajudar, mas você ainda está a fazer um monte você mesmo.

Na verdade, tenho uma tabela no meu esquema que armazena um ID para cada script de alteração (que corresponde ao número do processo no meu sistema de gerenciamento de incidentes / bug). No final de cada script de alteração insiro o ID para essa tabela. Eu tenho um script separado que verifica para ver o que foi feito em qualquer instância específica do banco de dados. Seria viável para automatizar executar cada um dos scripts que não foram executados ainda, mas eu gosto de correr scripts de alteração manualmente no caso de algo correr mal.

Rollbacks pode ser quase impossível, especialmente porque muitas alterações de esquema requerem algum tipo de migração de dados. Eu descobri que a melhor prática com quaisquer alterações no esquema são para torná-los compatíveis com versões anteriores. Nunca mudar o nome de uma tabela ou coluna (pelo menos no início). Apenas adicionar coisas, e fazer todos os novos acrescenta anulável. Um script de reversão simplesmente remove o material novo, se você percebe que algo não está certo. Claro que você acabar com antigas, colunas e tabelas não utilizadas, para que escrever um segundo script que é executado após a sua versão atual é considerado estável, que se livrar das coisas velhas.

I você quer escrever todos os scripts se você pode tirar vantagem do SQL Server 2005 tablediff utilitário que lhe dará muita flexibilidade. Alguns exemplos de uso pode ser encontrar aqui

Se você tem todos os seus scripts para uma determinada versão em uma pasta, você pode executar este como um arquivo de lote, se você colocá-lo nessa pasta:

for %%X in (*.SQL) do SQLCMD -S <SERVER_NAME> -d <DATABASE_NAME> -E -I -i "%%X"  >> ResultBatch.txt

Desculpe, eu não me lembro onde eu tenho isso ou eu daria crédito.

Temos nossos desenvolvedores verificar os scripts de alteração banco de dados em Subversion. Todos os scripts são repetíveis para que você possa executá-los várias vezes sem erros. Nós também vincular os scripts de alteração aos itens de emissão ou ids de bugs, para que possamos segurar um conjunto de alterações, se necessário. Temos, então, um processo de criação automatizado que expulsa um único arquivo de script SQL com todas as mudanças ordenadas de forma adequada. Este arquivo único é então utilizado para promover as mudanças nos ambientes de teste, QA e produção. Nós pensamos que esta é a melhor abordagem com desenvolvedores corporativos. Mais detalhes sobre como o fazemos AQUI O seu feedback seria apreciada.

Use liquibase. É de Java embora.

Sim, você pode escrever seus scripts de migração na variante de SQL de sua escolha.

É bem testado e utilizado por um grande número de pessoas.

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