Existe um sistema de controle de versão para mudanças na estrutura do banco de dados?

votos
104

Costumo correr para o seguinte problema.

Eu trabalho em algumas mudanças para um projeto que exigem novas tabelas ou colunas no banco de dados. I fazer as modificações de banco de dados e continuar meu trabalho. Normalmente, eu me lembro de anotar as mudanças para que possam ser replicadas no sistema ao vivo. No entanto, eu não lembre-se sempre o que eu mudei e eu nem sempre lembre-se de anotá-la.

Então, eu faço um esforço para o sistema ao vivo e obter um grande erro, óbvio que não existe NewColumnX, ugh.

Independentemente do fato de que isso pode não ser a melhor prática para esta situação, existe um sistema de controle de versão para bancos de dados? Eu não me importo sobre a tecnologia de banco de dados específico. Eu só quero saber se houver. Se isso acontecer a trabalhar com o MS SQL Server, então ótimo.

Publicado 02/08/2008 em 02:52
fonte usuário
Em outras línguas...                            


22 respostas

votos
56

Em Ruby on Rails, há um conceito de migração - um script rápido para alterar o banco de dados.

Você gerar um arquivo de migração, que tem regras para aumentar a versão db (como a adição de uma coluna) e regras para fazer o downgrade da versão (como a remoção de uma coluna). Cada migração é numerado, e uma mesa mantém o controle de sua versão atual db.

Para migrar para cima , você executar um comando chamado "db: migrar", que olha para a sua versão e aplica os scripts necessários. Você pode migrar para baixo de uma forma similar.

Os scripts de migração próprios são mantidos em um sistema de controle de versão - sempre que você alterar o banco de dados que você verificar em um novo script, e qualquer desenvolvedor pode aplicá-lo a trazer o seu db local para a versão mais recente.

Respondeu 02/08/2008 em 07:23
fonte usuário

votos
29

Eu sou um pouco velho-escola, em que eu uso arquivos de origem para a criação de banco de dados. Na verdade, existem 2 arquivos - projeto de database.sql e projeto de updates.sql - o primeiro para o esquema e os dados persistentes, ea segunda para modificações. Claro, ambos estão sob controle de origem.

Quando as alterações de banco de dados, primeiro eu atualizar o esquema principal no projeto de database.sql, em seguida, copiar as informações relevantes para o projeto-updates.sql, por exemplo ALTER TABLE. Posso, então, aplicar as atualizações ao banco de dados de desenvolvimento, teste, iterate até bem feito. Em seguida, verifique nos arquivos, teste novamente, e aplicam-se a produção.

Além disso, eu geralmente tenho uma tabela no db - Config - tais como:

SQL

CREATE TABLE Config
(
    cfg_tag VARCHAR(50),
    cfg_value VARCHAR(100)
);

INSERT IGNORE  INTO Config(cfg_tag, cfg_value) VALUES
( 'db_version', '$Revision: $'),
( 'db_revision', '$Revision: $');

Então, eu adicionar o seguinte para a seção de atualização:

UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';

O db_versionfica só mudou quando o banco de dados é recriado, e db_revisionme dá uma indicação quanto o db está fora da linha de base.

Eu poderia manter as atualizações em seus próprios arquivos separados, mas eu escolhi para mash-los todos juntos e usar cortar e colar para extrair secções relevantes. Um pouco mais de limpeza está em ordem, ou seja, remover ':' a partir de $ Revision 1.1 $ congelá-los.

Respondeu 26/09/2008 em 21:29
fonte usuário

votos
11

Redgate tem um produto chamado SQL Source Control . Ele se integra com TFS, SVN, SourceGear Vault, Vault Pro, Mercurial, Perforce, e Git.

Respondeu 08/07/2011 em 15:51
fonte usuário

votos
11

MyBatis (anteriormente iBatis) tem uma migração do esquema , ferramenta para uso na linha de comando. Ele é escrito em java que pode ser usado com qualquer projeto.

Para conseguir uma boa prática de gestão de mudança de banco de dados, precisamos identificar alguns objetivos-chave. Assim, o sistema MyBatis esquema de Migração (ou MyBatis Migrações para o short) procura:

  • Trabalhar com qualquer banco de dados, novo ou existente
  • Aproveitar o sistema de controlo de origem (por exemplo, Subversion)
  • Permitem que os desenvolvedores concorrentes ou equipes para trabalhar de forma independente
  • Permitir conflitos muito visível e facilmente administrável
  • Permitir para a frente e para trás de migração (evoluir, devolver respectivamente)
  • Faça o status atual do banco de dados facilmente acessível e compreensível
  • Ativar migrações apesar privilégios de acesso ou burocracia
  • Trabalhar com qualquer metodologia
  • Incentiva boas práticas, consistentes
Respondeu 10/07/2010 em 22:56
fonte usuário

votos
10

Pergunto-me que ninguém mencionou a ferramenta open source liquibase que é baseado em Java e deve trabalhar para quase todos os banco de dados que suporta jdbc. Comparado com trilhos ele usa XML em vez Ruby para executar as alterações de esquema. Embora eu não gosto de xml para linguagens específicas de domínio a vantagem muito legal de xml é que liquibase sabe como reverter certas operações como

<createTable tableName="USER"> 
   <column name="firstname" type="varchar(255)"/>
</createTable>

Então você não precisa lidar com isso da sua própria

instruções SQL puros ou importações de dados também são suportados.

Respondeu 10/07/2010 em 22:26
fonte usuário

votos
10

Eu recomendo delta SQL . Eu só usá-lo para gerar os scripts diff quando eu terminar de codificação meu recurso e verificar esses scripts em minha ferramenta de controle de origem (Mercurial :))

Eles têm tanto um servidor SQL e Oracle versão.

Respondeu 28/05/2009 em 03:12
fonte usuário

votos
9

A maioria dos motores de banco de dados deve suportar despejar seu banco de dados em um arquivo. Eu sei MySQL faz, de qualquer maneira. Este será apenas um arquivo de texto, para que você possa alegam que a Subversion, ou o que quer que você usa. Seria fácil de executar um diff nos arquivos também.

Respondeu 02/08/2008 em 02:56
fonte usuário

votos
8

Se você estiver usando SQL Server que seria difícil de bater Dados Cara (aka o Database Edition of Visual Studio). Uma vez que você pegar o jeito dele, fazendo um esquema comparar entre a sua versão controlada fonte de banco de dados e a versão em produção é uma brisa. E com um clique você pode gerar o DDL diff.

Há uma instrução vídeo no MSDN que é muito útil.

Eu sei sobre DBMS_METADATA e Toad, mas se alguém poderia vir acima com um cara de dados para Oracle então a vida seria realmente doce.

Respondeu 10/09/2008 em 20:49
fonte usuário

votos
7

Dê uma olhada no DBMS_METADATA pacote Oracle.

Em particular, os seguintes métodos são particularmente úteis:

  • DBMS_METADATA.GET_DDL
  • DBMS_METADATA.SET_TRANSFORM_PARAM
  • DBMS_METADATA.GET_GRANTED_DDL

Quando estiver familiarizado com a forma como eles funcionam (bastante auto-explicativo) você pode escrever um script simples para despejar os resultados desses métodos para arquivos de texto que podem ser colocados sob controle de origem. Boa sorte!

Não tenho certeza se há algo este simples para MSSQL.

Respondeu 01/09/2008 em 21:57
fonte usuário

votos
7

Tem sua inicial CREATE TABLE no controlador de versão, em seguida, adicione ALTER TABLE, mas nunca editar arquivos, apenas mais alterar arquivos idealmente nomeados sequencialmente, ou mesmo como um "conjunto de mudanças", para que você possa encontrar todas as mudanças para uma implementação particular.

A parte mais resistentes que eu posso ver, é o acompanhamento de dependências, por exemplo, para um determinado implantação tabela B pode precisar ser atualizado antes da tabela A.

Respondeu 31/08/2008 em 12:25
fonte usuário

votos
7

Para Oracle, eu uso Toad , que pode despejar um esquema para um número de arquivos discretos (por exemplo, um arquivo por tabela). Eu tenho alguns scripts que gerenciam esta coleção no Perforce, mas eu acho que deveria ser facilmente factível em praticamente qualquer sistema de controle de revisão.

Respondeu 02/08/2008 em 07:05
fonte usuário

votos
6

PLSQL Developer, uma ferramenta de Todos os Automations Arround, tem um plugin para repositórios que funciona bem (mas não muito) com o Visual Source Safe.

A partir da web:

O controle de versão plug-in fornece uma forte integração entre o PL / SQL Developer IDE >> e qualquer sistema de controle de versão que suporta o Microsoft SCC Interface Specification. >> Isso inclui mais popular Sistemas de Controle de Versão como o Microsoft Visual SourceSafe, >> Merant PVCS e MKS Fonte Integrity.

http://www.allroundautomations.com/plsvcs.html

Respondeu 17/09/2008 em 16:50
fonte usuário

votos
6

Eu fiz isso e desligar durante anos - a gestão (ou tentando administrar) versões de esquema. As melhores abordagens dependem das ferramentas que você tem. Se você pode obter a ferramenta Quest Software "Schema Manager" você estará em boa forma. Oracle tem sua própria ferramenta, inferior, que também é chamado de "Schema Manager" (confundindo muito?) Que eu não recomendo.

Sem uma ferramenta automatizada (ver outros comentários aqui sobre Dados Cara), então você estará usando scripts e arquivos DDL diretamente. Escolha uma abordagem, documentá-lo e segui-lo rigorosamente. Eu gosto de ter a capacidade de recriar o banco de dados a qualquer momento, por isso prefiro ter uma exportação completa DDL de todo o banco de dados (se eu sou o DBA), ou do esquema desenvolvedor (se eu estou em produto modo -desenvolvimento).

Respondeu 15/09/2008 em 16:01
fonte usuário

votos
6

Eu escrevo meus scripts libertação db em paralelo com codificação, e manter os scripts de liberação em uma seção específica do projeto em SS. Se eu fizer uma alteração ao código que requer uma mudança db, então eu atualizar o script de lançamento ao mesmo tempo. Antes do lançamento, eu executar o script em um db dev limpo (estrutura copiada sábio de produção) liberação e fazer o meu teste final sobre ele.

Respondeu 30/08/2008 em 19:58
fonte usuário

votos
5

ER Estúdio permite reverter o esquema do banco de dados na ferramenta e você pode, em seguida, compará-lo a viver bancos de dados.

Exemplo: Reverse seu esquema de desenvolvimento em ER Studio - compará-lo à produção e ele vai listar todas as diferenças. Pode roteiro as alterações ou simplesmente empurrá-los através automaticamente.

Depois de ter um esquema no ER Studio, você pode salvar o script de criação ou guardá-lo como um binário proprietário e guardá-lo no controle de versão. Se você quiser voltar para uma versão anterior do sistema, apenas verificá-la e empurrá-lo para a sua plataforma db.

Respondeu 17/09/2008 em 19:04
fonte usuário

votos
5

Há uma PHP5 "quadro de migração de banco de dados" chamado Ruckusing. Eu nunca usei isso, mas os exemplos mostram a idéia, se você usar a linguagem para criar o banco de dados como e quando necessário, você só tem que rastrear arquivos de origem.

Respondeu 02/08/2008 em 08:48
fonte usuário

votos
3

Você pode usar ferramentas Microsoft SQL Server Data no Visual Studio para gerar scripts para objetos de banco de dados como parte de um projeto SQL Server. Você pode então adicionar os scripts para controle de origem usando a integração de controle de origem que está embutido no estúdio visual. Além disso, Projetos SQL Server permite que você verificar os objetos de banco de dados usando um compilador e gerar scripts de implantação para atualizar um banco de dados existente ou criar uma nova.

Respondeu 22/12/2014 em 11:58
fonte usuário

votos
2

Schema Compare para Oracle é uma ferramenta projetada especificamente para migrar mudanças do nosso banco de dados Oracle para outro. Por favor, visite o URL abaixo para o link de download, onde você será capaz de usar o software para uma avaliação totalmente funcional.

http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm

Respondeu 10/01/2010 em 03:59
fonte usuário

votos
2

Nós usamos MS Team System Database Edition com sucesso muito bom. Ele se integra com TFS controle de versão e Visual Studio mais ou menos homogêneo e nos permite administra procedimentos armazenados, vistas, etc., facilmente. Resolução de conflitos pode ser uma dor, mas a história versão é completa quando ele é feito. Depois disso, as migrações para QA e produção são extremamente simples.

É justo dizer que é um produto versão 1.0, embora, e não é sem algumas questões.

Respondeu 26/09/2008 em 19:12
fonte usuário

votos
1

Eu recomendo uma das duas abordagens. Em primeiro lugar, investir em PowerDesigner da Sybase. Enterprise Edition. Ele permite que você projete datamodels físicas, e muito mais. Mas ele vem com um repositório que permite verificar em seus modelos. Cada novo check-in pode ser uma nova versão, ela pode comparar qualquer versão de qualquer outra versão e até mesmo para o que está em seu banco de dados nesse momento. Ela irá então apresentar uma lista de todas as diferenças e pedir que devem ser migrados ... e então constrói o roteiro para fazê-lo. Não é barato, mas é um negócio em dobro do preço e é ROI é de cerca de 6 meses.

A outra idéia é ligar DDL auditoria (funciona em Oracle). Isto irá criar uma tabela com todas as mudanças que você faz. Se você consultar as alterações do timestamp a última vez que mudou-se as alterações de banco de dados para incitar para a direita agora, você terá uma lista ordenada de tudo que você fez. A poucos onde cláusulas para eliminar de soma zero muda como criar foo mesa; seguido por tabela foo gota; E você pode facilmente construir um script mod. Por que manter as alterações em um wiki, que é o dobro do trabalho. Deixe o banco de dados de monitorá-los para você.

Respondeu 26/09/2008 em 18:53
fonte usuário

votos
1

Duas recomendações do livro: "Bases de refatoração" por Ambler e Sadalage e "Técnicas de banco de dados ágeis" por Ambler.

Alguém mencionou Rails Migrações. Eu acho que eles funcionam muito bem, mesmo fora de aplicações Rails. Eu usei-os em um aplicativo ASP com SQL Server que estávamos no processo de mudança para Rails. Você verifica os scripts de migração-se na VCS. Aqui está um post por Pragmatic Dave Thomas sobre o assunto.

Respondeu 22/09/2008 em 19:17
fonte usuário

votos
1

Na ausência de um VCS para alterações da tabela Fui registrando-os em uma wiki. Pelo menos, então eu posso ver quando e por que foi mudado. Está longe de ser perfeito como nem todo mundo está fazendo isso e temos várias versões do produto em uso, mas melhor do que nada.

Respondeu 01/09/2008 em 08:29
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more