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