Atualização de Banco de Dados Automatica Delphi
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
Curtidas 0
Respostas
Arthur Heinrich
09/06/2023
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.
GOSTEI 0
Arthur Heinrich
09/06/2023
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.
GOSTEI 0
Lucas Daniel
09/06/2023
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
GOSTEI 0