Como atualizar um banco local?

Olá galera,

Tenho um programinha que funciona localmente em diversas máquinas, este programa possui um banco de dados incorporado em cada cliente. Neste banco, algumas informações precisam ser atualizadas ao menos uma vez por semana, ou seja, acrescentando-se linhas nas tabelas, removendo linhas e se possível modificando estas tabelas. Porém, não possuo acesso físico a todas as máquinas que contém o programa, portanto gostaria de saber se é possível desenvolver uma atualização para este aplicativo a fim de poder disponibilizar atualizações para suas tabelas (locais) na internet, onde o programa cliente iria verificar diariamente a existência de uma atualização e caso possua, irá baixa-la e executa-la.

Qual o caminho para se fazer algo deste tipo?

Pensei em algo como disponibilizar em algum lugar um arquivo .sql, que poderia ser baixado e executado pelo programa cliente e neste arquivo estaria as instruções a serem executadas em seu banco. É este o caminho ou existe forma melhor?

Abraços,

Se for fazer isso, você precisa dar uma pensadinha porque há o caso em que a aplicação está atrasada um, dois ou mais ciclos de atualização. O que você vai fazer nesse caso (só estou pensando nos scripts SQL; para seus jars e .class, o problema é pior porque se a aplicação estiver rodando em Windows, você terá de matar sua aplicação principal completamente, para poder atualizar os arquivos que ficam “presos” durante a execução da aplicação.

a) Você vai ter N scripts SQL, que são necessários para atualizar da versão Y-1, Y-2, … Y-N (a que está na aplicação) para a Y (atual)
b) Você vai ter N scripts SQL, que são necessários para atualizar da versão Y-N para Y-N-1, Y-N-1 para Y-N-2 etc… até Y-1 para Y, e os vai executando sequencialmente.

O primeiro caso é mais eficiente e mais rápido para executar no cliente mas o teste é terrível.
O segundo caso parece ser mais simples, mas o teste também não é tão trivial assim.

[quote=entanglement]Se for fazer isso, você precisa dar uma pensadinha porque há o caso em que a aplicação está atrasada um, dois ou mais ciclos de atualização. O que você vai fazer nesse caso (só estou pensando nos scripts SQL; para seus jars e .class, o problema é pior porque se a aplicação estiver rodando em Windows, você terá de matar sua aplicação principal completamente, para poder atualizar os arquivos que ficam “presos” durante a execução da aplicação.

a) Você vai ter N scripts SQL, que são necessários para atualizar da versão Y-1, Y-2, … Y-N (a que está na aplicação) para a Y (atual)
b) Você vai ter N scripts SQL, que são necessários para atualizar da versão Y-N para Y-N-1, Y-N-1 para Y-N-2 etc… até Y-1 para Y, e os vai executando sequencialmente.

O primeiro caso é mais eficiente e mais rápido para executar no cliente mas o teste é terrível.
O segundo caso parece ser mais simples, mas o teste também não é tão trivial assim. [/quote]

Olá amigo,

Bem, a primeira solução apresentada por você, confesso que nunca havia passado pela minha cabeça. Aliás, nem sei como criar diferentes versões de scripts de acordo com a versão do banco do cliente, a fim de traze-la para a mais atual. Acredito que esta apresente um risco maior no sentido de não haver uma conformidade no banco do cliente, uma vez que diferentes versões executariam diferentes scripts. Se um script for escrito de forma errada, terei problemas.

Porém a segunda foi a que eu pensei em aplicar, uma vez que teria diferentes versões de scripts alocadas em um servidor e estas seriam executadas de forma sequencial, até a mais atual. Se um script for escrito de forma errada, posso escrever outro para corrigir e terei certeza que todas as máquinas vão executa-lo.

Pensando melhor, agora entendi o que você quis dizer com “teste”… rs