Atualização de Banco de Dados Automatica Delphi

09/06/2023

0

Olá, gostaria de saber se existe alguma forma de atualizar o banco de dados do meu cliente comparando ele com o atual, de uma forma parecida com a ferramente database comparer do IBExpert
Lucas Daniel

Lucas Daniel

Responder

Posts

12/06/2023

Arthur Heinrich

Sim. Assim como as ferramentas examinam as views internas dos bancos, que descrevem toda a modelagem, você também pode fazer o mesmo e comparar.
Responder

13/06/2023

Arthur Heinrich

Olá, gostaria de saber se existe alguma forma de atualizar o banco de dados do meu cliente comparando ele com o atual, de uma forma parecida com a ferramente database comparer do IBExpert


Indo um passo à frente.

Vamos supor que você desenvolve um sistema, que é distribuído a vários clientes. Com o passar do tempo, seu sistema evolui e se torna diferente dos sistemas adquiridos por seus clientes.

É chegado o momento do upgrade, mas é possível que cada cliente esteja em uma versão distinta. Mas como fazer esta atualização, de forma a trazer todos para a última versão, da forma menos traumática o possível.

Você precisa desenvolver um script de upgrade incremental, em que a cada mudança são incorporadas as alterações. Ao executar este script, tudo o que precisa ser feito, deve ser feito por ele, sem exceções.

Você pode adotar duas estratégias:

1 - Manter em uma tabela, um número de versão, que serve de base para a atualização.

O script pode ser mais ou menos assim:

if (tabela de controle não existe) ou (versão is null)
- Cria o modelo de dados inicial
- Atualiza a versão do modelo para 1.0

if (versão = 1.0)
- Cria tabelas novas
- Cria colunas novas em tabelas antigas
- Atualiza dados
- Atualiza a versão do modelo para 2.0

if (versão = 2.0)
- Cria tabelas novas
- Cria colunas novas em tabelas antigas
- Atualiza dados
- Atualiza a versão do modelo para 3.0

E assim por diante.

Como ponto positivo deste modelo, você organiza as mudanças que ocorreram a cada versão e é mais simples de implementar. Porém, em uma situação em que houve manipulação indevida e algo foi bagunçado, o script não te ajuda a corrigir o problema.

Ou, você pode adotar uma abordagem voltada a objetos.

if (não existe a coluna COL1 na tabela TB1)
- Cria a coluna COL1 na tabela TB1
- Executa script de atualização

if (não existe a tabela TB2)
- Cria a tabela TB2
- Executa script de atualização

...

Este script é bem mais complexo, mas permite você se recuperar de uma condição de "catástrofe", onde partes do modelo são perdidos, mesmo que com perdas.
Responder

13/06/2023

Lucas Daniel

Olá, gostaria de saber se existe alguma forma de atualizar o banco de dados do meu cliente comparando ele com o atual, de uma forma parecida com a ferramente database comparer do IBExpert


Indo um passo à frente.

Vamos supor que você desenvolve um sistema, que é distribuído a vários clientes. Com o passar do tempo, seu sistema evolui e se torna diferente dos sistemas adquiridos por seus clientes.

É chegado o momento do upgrade, mas é possível que cada cliente esteja em uma versão distinta. Mas como fazer esta atualização, de forma a trazer todos para a última versão, da forma menos traumática o possível.

Você precisa desenvolver um script de upgrade incremental, em que a cada mudança são incorporadas as alterações. Ao executar este script, tudo o que precisa ser feito, deve ser feito por ele, sem exceções.

Você pode adotar duas estratégias:

1 - Manter em uma tabela, um número de versão, que serve de base para a atualização.

O script pode ser mais ou menos assim:

if (tabela de controle não existe) ou (versão is null)
- Cria o modelo de dados inicial
- Atualiza a versão do modelo para 1.0

if (versão = 1.0)
- Cria tabelas novas
- Cria colunas novas em tabelas antigas
- Atualiza dados
- Atualiza a versão do modelo para 2.0

if (versão = 2.0)
- Cria tabelas novas
- Cria colunas novas em tabelas antigas
- Atualiza dados
- Atualiza a versão do modelo para 3.0

E assim por diante.

Como ponto positivo deste modelo, você organiza as mudanças que ocorreram a cada versão e é mais simples de implementar. Porém, em uma situação em que houve manipulação indevida e algo foi bagunçado, o script não te ajuda a corrigir o problema.

Ou, você pode adotar uma abordagem voltada a objetos.

if (não existe a coluna COL1 na tabela TB1)
- Cria a coluna COL1 na tabela TB1
- Executa script de atualização

if (não existe a tabela TB2)
- Cria a tabela TB2
- Executa script de atualização

...

Este script é bem mais complexo, mas permite você se recuperar de uma condição de "catástrofe", onde partes do modelo são perdidos, mesmo que com perdas.


Esse pimeiro método é interessante e vou considerar trabalhar com ele, mas imaginei que talvez houve algo parecido com o "database comparer" do IBExpert onde ele pega um banco de dados "Fonte" e um "destino" onde ele vai comparar os metadatas e automaticamente criar as tabelas, triggers, colunas etc do banco
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar