Como você prepara seus deltas SQL? você salva manualmente cada SQL que altera o esquema em uma pasta delta ou tem algum tipo de processo de difusão automatizado?
Estou interessado em convenções para versionar o esquema do banco de dados junto com o código-fonte. Talvez um gancho de pré-confirmação que difira o esquema?
Além disso, quais opções para deltas diferentes existem além do DbDeploy ?
EDIT: vendo as respostas, gostaria de esclarecer que estou familiarizado com o esquema padrão para executar uma migração de banco de dados usando deltas. Minha pergunta é sobre como criar os próprios deltas, de preferência automaticamente.
Além disso, o versionamento é para PHP e MySQL, se isso faz diferença. (Sem soluções Ruby, por favor).
sql
mysql
schema
versioning
Eran Galperin
fonte
fonte
Respostas:
Vejo
Existe um sistema de controle de versão para alterações na estrutura do banco de dados?
Como eu versão meu banco de dados MS SQL no SVN?
e artigo de Jeff
Obtenha seu banco de dados sob controle de versão
Sinto sua dor e gostaria que houvesse uma resposta melhor. Isso pode estar mais próximo do que você estava procurando.
Mecanismos para rastrear alterações no esquema do banco de dados
Geralmente, sinto que não há uma solução adequada e aceita para isso, e eu mesmo passo nessa área.
fonte
Você pode dar uma olhada em outro segmento semelhante: Como eu versão meu banco de dados MS SQL no SVN? .
fonte
Se você ainda está procurando opções: dê uma olhada no neXtep designer. É um ambiente de desenvolvimento de banco de dados GPL gratuito, baseado nos conceitos de controle de versão. No ambiente, você sempre trabalha com entidades com versão e pode se concentrar no desenvolvimento do modelo de dados. Depois que uma liberação é concluída, o mecanismo de geração SQL conectado ao sistema de controle de versão pode gerar qualquer delta necessário entre duas versões e oferecerá algum mecanismo de entrega, se necessário.
Entre outras coisas, você pode sincronizar e reverter a sincronização de seu banco de dados durante desenvolvimentos, criar diagramas de modelo de dados, consultar seu banco de dados usando clientes SQL integrados, etc.
Dê uma olhada no wiki para obter mais informações: http://www.nextep-softwares.com/wiki
Atualmente, ele suporta Oracle, MySql e PostgreSql e está em java, para que o produto seja executado no Windows, Linux e Mac.
fonte
Garanto que as alterações de esquema sejam sempre aditivas. Portanto, não descarto colunas e tabelas, porque isso zaparia os dados e não pode ser revertido mais tarde. Dessa forma, o código que usa o banco de dados pode ser revertido sem perder dados ou funcionalidade.
Eu tenho um script de migração que contém instruções que criam tabelas e colunas se elas ainda não existirem e as preenchem com dados.
O script de migração é executado sempre que o código de produção é atualizado e após novas instalações.
Quando gostaria de eliminar algo, faço isso removendo-os do script de instalação do banco de dados e do script de migração, para que esses elementos obsoletos do esquema sejam gradualmente eliminados em novas instalações. Com a desvantagem de que novas instalações não podem fazer o downgrade para uma versão mais antiga antes da instalação.
E é claro que executo DDLs por meio desses scripts e nunca diretamente no banco de dados para manter as coisas sincronizadas.
fonte
Eu não gerencio deltas. Eu faço alterações em um banco de dados mestre e tenho uma ferramenta que cria um script de construção baseado em XML com base no banco de dados mestre.
Quando chega a hora de atualizar um banco de dados existente, tenho um programa que usa o script de construção baseado em XML para criar um novo banco de dados e as tabelas básicas. Em seguida, copio os dados do banco de dados antigo usando INSERT INTO x SELECT FROM ye aplico todos os índices, restrições e gatilhos.
Novas tabelas, novas colunas, colunas excluídas são tratadas automaticamente e, com alguns truques para ajustar a rotina de cópia, posso lidar com renomeação de colunas, alterações de tipo de coluna e outras refatorações básicas.
Eu não recomendaria esta solução em um banco de dados com uma quantidade enorme de dados, mas atualizo regularmente um banco de dados com mais de 1 GB e 400 tabelas.
fonte
Você não mencionou qual RDBMS está usando, mas, se for o MS SQL Server, o SQL Compare da Red-Gate nos foi indispensável na criação de deltas entre os scripts de criação de objetos.
fonte
Não sou do meu jeito, mas desenvolvi um aplicativo Web interno para rastrear alterações nos esquemas de banco de dados e criar scripts de atualização com versão.
Essa ferramenta é chamada Brasil e agora é de código aberto sob uma licença do MIT. O Brasil é baseado em ruby / ruby on rails e suporta a implantação de alterações em qualquer banco de dados suportado pelo Ruby DBI (MySQL, ODBC, Oracle, Postgres, SQLite).
O suporte para colocar os scripts de atualização no controle de versão está planejado.
fonte
http://bitbucket.org/idler/mmp - ferramenta de versionamento de esquema para mysql, escrita em PHP
fonte
Estamos exportando os dados para um formato portátil (usando nossa cadeia de ferramentas) e depois importando-os para um novo esquema. não há necessidade de delta SQL. Altamente recomendado.
fonte
Eu uso o banco de dados Firebird para a maior parte do desenvolvimento e uso a ferramenta de administração FlameRobin . Tem uma boa opção para registrar todas as alterações. Ele pode registrar tudo em um arquivo grande ou um arquivo por alteração no banco de dados. Eu uso essa segunda opção e, em seguida, guardo cada script no software de controle de versão - anteriormente usei o Subversion, agora uso o Git.
Suponho que você possa encontrar alguma ferramenta MySQL que tenha o mesmo recurso de registro que o FlameRobin faz para o Firebird.
Em uma das tabelas do banco de dados, eu armazeno o número da versão da estrutura do banco de dados, para poder atualizar qualquer banco de dados facilmente. Também escrevi um script PHP simples que executa esses scripts SQL um a um em qualquer banco de dados de destino (o caminho do banco de dados e o nome de usuário / senha são fornecidos na linha de comando).
Há também uma opção para registrar todas as instruções DML (inserir, atualizar excluir), e eu a ativo enquanto modifico alguns dados 'padrão' que cada banco de dados contém.
Escrevi um bom artigo sobre como faço tudo isso em detalhes. Você pode fazer o download do artigo no formato .pdf, juntamente com os scripts PHP de demonstração aqui .
fonte
Também desenvolvi um conjunto de scripts PHP em que os desenvolvedores podem enviar seus scripts deltasql para um repositório central.
Em uma das tabelas do banco de dados (chamada TBSYNCHRONIZE), eu armazeno o número da versão do script executado mais recente, para poder atualizar facilmente qualquer banco de dados usando a interface da web ou um cliente desenvolvido de propósito para o Eclipse.
A interface da web permite gerenciar vários projetos. Ele também suporta "ramificações" do banco de dados.
Você pode testar o aplicativo em http://www.gpu-grid.net/deltasql (se você fizer login como administrador com a senha testdbsync). O aplicativo é de código aberto e pode ser baixado aqui: http://sourceforge.net/projects/deltasql
O deltasql é usado produtivamente na Suíça e na Índia e é popular no Japão.
fonte
Alguns meses atrás, procurei a ferramenta para versionar o esquema do MySQL. Encontrei muitas ferramentas úteis, como migração de doutrina, migração de RoR, algumas ferramentas escritas em Java e Python.
Mas nenhum deles satisfez meus requisitos.
Minhas exigências:
Comecei a escrever minha ferramenta de migração e hoje tenho a versão beta.
Por favor, tente, se você tiver interesse neste tópico. Envie-me solicitações futuras e relatórios de erros.
Código-fonte: bitbucket.org/idler/mmp/src Visão geral em inglês: bitbucket.org/idler/mmp/wiki/ Visão geral da casa em russo: antonoff.info/development/mysql-migration-with-php-project
fonte
Eu uso http://code.google.com/p/oracle-ddl2svn/
fonte
Também estou interessado neste tópico.
Há algumas discussões sobre esse tópico no wiki do Django .
Curiosamente, parece que o CakePHP possui versão de esquema embutida usando apenas o
cake schema generate
comando.fonte
Para MySQL
Quando aterro em um novo banco de dados:
Primeiramente, verifico a estrutura:
Em uma segunda etapa, verifico os dados tabela a tabela com
mysqldiff
. É um pouco arcaico, mas um loop php baseado eminformation_schema
dados faz o trabalho certamentePara a versão, uso da mesma maneira, mas formato um script de atualização SQL (para atualização ou reversão) com resultados diff e uso a convenção de número de versão (com várias modificações, o número da versão se parece com um endereço IP) .
fonte
Estou usando controle de versão estrito do esquema do banco de dados (rastreado em uma tabela separada). Os scripts são armazenados no controle de versão, mas todos verificam a versão atual do esquema antes de fazer qualquer alteração.
Aqui está a implementação completa do SQL Server (a mesma solução pode ser desenvolvida para o MySQL, se necessário): Como manter a versão do esquema do banco de dados do SQL Server
fonte
Após uma longa investigação, descobri que existem algumas ferramentas de terceiros ou tipos de projetos do Visual Studio que não me satisfazem, ou apenas blogs sobre a teoria, mas nenhuma implementação. Então, implementei um sistema de trabalho, usado quase um ano, e expliquei aqui:
http://nalgorithm.com/2015/11/09/database-versioning-part-1/
dependendo do interesse, continuará escrevendo mais.
fonte