Versionamento de Banco

Ai pessoal tenho um questão bem complexa a tratar neste tópico e espero que venham a surgir das mais diversas opiniões possíveis para um solução.
Bem em primeiro estou iniciando com Java a mais ou menos 8 meses e a minha dificuldade agora é em arranjar uma solução para controlar a versão do Bando de Dados ( no caso postgres ) e da aplicação ( jsp, xml, jasper ) enfim toda a parte que não é banco hehehe :wink:

O que acontece suponhamos:

Meu cliente está usando a versão 1.0 de minha aplicação. O meu CVS já arquivou todos os arquivos e seus estados da versão 1.0. A partir de agora concordamos que os desenvolvedores estão em continuo trabalho para fazer alterações e essas alterações vão gerar com o tempo a versão 2.0, correto ?
Então imaginamos que eu testei e instalei a versão 2.0 certo ? Bem o meu CVS continua controlando a parte da aplicação mas e agora na hora de instalar a versão 2.0 no meu cliente ele já tem dados no Banco não é que nem na implantação que eu crio o banco sem m preocupar com isso então os arquivosda aplicação que eu tenho que mudar é mais fácil pois meu CVS controla mas e as tabelas do Banco ? O que foi mudado ou o que foi preciso alterar ? Esse é o maior problema ao invés de todos terem que ficar anotando as rotinas feitas o que foi alterado o que não foi, vocês conhecem ou sabem como isso poderia ser resolvido da melhor maneira possível ? Algum software que controle as versão e por exemplo da versão 1.0 para 2.0 foi mudado isso então ele gera um script para fazer essa alteração ?

Olha eu espero ter sido claro e ter me feito esclarecer só para garantir imagine uma tabela Pessoa e o analista vai e muda ela para Pessoal, bem vocês sabem como é né no momento em que muitas pessoas dependem umas das outras sempre tem alguém que se esquece de algo e começa a dor de cabeça. Então lá no banco do meu cliente onde já está implantado um programa na versão 1.0 eu não posso dropar tudo e mandar recriar o banco, OBVIO, mas então eu tenho que prever que uma solução para colocar a versão 2.0 seria criar uma tabela Pessoal igual o da versão 2.0 transferir os dados da tabela Pessoa para ela, dropar a tabela Pessoa e instalar a nova versão da aplicação.
O que eu queria com isso é que meu analista não ficasse responsavel por anotar e um software controlasse tudo isso por versionamento e gerar os scripts necessários para mudar da 1.0 para 2.0 e assim por diante.

Bem é isso espero agora com os post podermos trocar idéias ou se vocês já saberiam me dizer a resposta melhor ainda ou um software que faça isso mesmo pago é de se analisar.

Um grande abraço
Junior

Acho que isso não tem nada a ver com Java Avançado, mas enfim, algum moderador deve mover isso para o fórum correto.

A única idéia que me vém a cabeça seria guardar o seu script de criação de tabelas no CVS. Com isso, você teria no CVS um arquivo .SQL com a versão 1.0 do seu modelo e depois com a versão 2.0.

Antes de fazer o deploy da sua versão 2.0, você teria que rodar um diff e comparar os modelos da versão 1.0 para 2.0. Com isso, você saberia o que mudou de uma versão para outra.

Como implementar essas mudanças automaticamente?

Nunca vi ou ouvi falar sobre uma ferramenta apropriada para isso, mas com certeza vai depender muito do banco de dados que você estiver utilizando. Não tem nenhum DBA por aí não? Deixa ele se virar um pouquinho! :smiley:

E não esquece de nos contar qual foi a solução!

Use branches. Ao finalizar a versa 1.0, crie uma tag “V_1_0” no CVS. Ai vcs continuam trabalhando no HEAD normalmente. Quando finaizarem a versao 2.0, marquem o estado atual do repositoro com a tag “V_2_0”. Para saber o que mudou de uma vesao para outra, eh doh dar um diff.
Qualquer cliente com de CVS tem isso.

Rafael

Rafael,

mas isso é branch? Isso não seria a utilização mais simples mesmo do CVS?

Branch não seria o desenvolvimento de versões em paralelo?

Você tem o modelo de dados na versão 1.0 (que vai evoluir para versões 1.1, 1.2, etc) e em paralelo começa a trabalhar na versão 1.0.1, 1.0.2, etc …

Em um determinado ponto, você não precisa mais do branch e pode fazer um merge da versão 1.2 com a versão 1.0.2.

Isso é muito comum quando você tem uma versão em produção (1.0), está trabalhando numa versão em desenvolvimento (1.2), mas ai encontra um bug em produção e precisa corrigir a partir da versão 1.0 (criando 1.0.1, 1.0.2, etc).

Bem, de repente estou apenas trocando os nomes! :wink:

[]'s
Marco Campêlo