Fellipe Henrique wrote:

> Seguinte, como vocês fazem para manter a base de dados de seus clientes
> sempre atualizadas, digo, quando você altera algo no banco e precisa enviar
> para os clientes, como vocês fazem?
> 
> Exiiste algum componente que verifique a base de dados, e me retorne as
> mudanças feitas?

Tenho uma tabela informando a versão do metadata e a data da última 
atualização. Guardo alterações de DDL e de DML separadamente.

O sistema tem uma constante informando qual é a versão atual do seu 
metadata. Sempre que o sistema é iniciado, a tal tabela de versões é 
comparada com essa constante, e se for diferente, executo os DDLs e DMLs 
necessários. Veja que se, por exemplo, o banco estiver na versão 5 e o 
sistema estiver em 7, tenho que executar duas atualizações, a 
atualização 5->6 e em seguida 6->7.

É obrigatório rodar DDLs e DMLs em transações distintas, porém, se eu 
tenho mais de uma atualização para fazer (como no exemplo acima), as 
duas DDLs e as duas DMLs (se existir) são unidas de forma que eu tenha 
sempre, no máximo, duas transações.

Ao detectar diferença de versão, um aviso é passado ao cliente. Ele até 
tem a opção de cancelar a atualização (ele pode ter seus motivos), e 
cancelando, o tal aviso é apresentado sempre que o sistema for aberto.

É um trabalho bem chato, mas eu precisei montar uma única vez. É um 
recurso reaproveitável.

--
João Morais

Responder a