[firebase-br] Replicar Dados
Sandro Souza
escovadordebits em gmail.com
Sex Dez 5 11:03:47 -03 2014
Bom dia/tarde/noite Gilson.
Esqueci de dizer que também tive que criar gatilhos (triggers) para os
eventos AFTER DELETE e BEFORE UPDATE, mas nesse caso, fiz uma aplicação
em Delphi 7 para ler o mesmo arquivo *.ini que contém a relação de
tabelas e colunas a serem sincronizadas e gerei o código fonte desses
gatilhos de forma automatizada, tanto o código fonte dos gatilhos das
duas bases em Firebird quanto os da base em Oracle.
On 05-12-2014 10:00, Sandro Souza wrote:
> Bom dia/tarde/noite Gilson.
>
> Na empresa em que trabalho, tive que desenvolver dois níveis de
> sincronização.
>
> No primeiro nível, uma aplicação, atualmente em Delphi 7, acessa uma
> base de dados em Oracle 10g (em CentOS Linux) e outra em Firebird
> 2.5.3 (em outra máquina com CentOS Linux 5.4). Esse primeiro nível de
> sincronização é apenas dentro da própria rede da unidade matriz da
> empresa (em Teresina/PI).
>
> Nas outras unidades da empresa (como aqui em Recife/PE), existe um
> segundo nível de sincronização, em que uma aplicação que fiz em
> Lazarus acessa a base de dados em Firebird 2.5.3 (em CentOS Linux 5.4)
> da unidade matriz (via link dedicado) e outra base de dados local em
> Firebird 2.5.3 (em Ubuntu Linux 12.04).
>
> A lógica que eu uso nas bases de dados das unidades filiais,
> basicamente, é a seguinte:
>
> Criei uma tabela onde registro cada exclusão de registro, salvando o
> nome da tabela e a condição de pesquisa do registro (apenas com os
> campos da chave primária com os seus respectivos valores).
>
> Cada registro de cada tabela que está sendo sincronizada (não estou
> sincronizando todas as tabelas da base Oracle), possuem uma
> coluna/campo do tipo "CHAR(1) DEFAULT 'S' NOT NULL" que eu uso como
> "flag de alteração", ou seja, se o valor dessa coluna for "S",
> significa que esse registro acabou de ser inserido ou foi modificado e
> precisa ser sincronizado com as outras bases de dados.
>
> O sincronizador das unidades, em Lazarus, lê um arquivo de
> configuração (um arquivo *.ini comum) contendo a relação das tabelas a
> serem sincronizadas, os campos que serão sincronizados (não preciso de
> todos) e quais campos formam a chave primária.
>
> Dentro do sincronizador, eu crio uma thread para sincronizar cada
> tabela, e no método principal de execução da thread de sincronização,
> tenho um laço principal que fica executando continuamente a
> sincronização.
>
> A primeira etapa é ler os registros de exclusão de uma base e aplicar
> na outra base (executar a mesma exclusão na outra base), excluindo o
> registro de exclusão posteriormente. Depois fazer o mesmo da segunda
> base para a primeira, e para priorizar a segunda etapa da
> sincronização, eu limito a quantidade de registros a serem excluídos
> (FIRST 10), só para não gastar muito tempo nessa etapa e priorizar a
> segunda que é muito mais importante.
>
> A segunda etapa consiste em ler todos os registros (limito de 1000 em
> 1000) que estão marcados para sincronização (com a flag de alteração
> com o valor 'S') e inserir (insert) ou atualizar (update) o mesmo
> registro na outra base. Depois faço o mesmo processo invertendo as bases.
>
> A questão de limitar a quantidade de registros é apenas para ajustar o
> "tamanho" das transações.
>
> Só tem que ter o cuidado de colocar (caso não haja) uma coluna que
> indique para que unidade deve ir aquele determinado registro, e mesmo
> assim, apenas em tabelas em que isso seja necessário, pois existem
> tabelas globais que todas as unidades devem ter.
>
> Expliquei bem superficialm
>
> On 05-12-2014 06:58, Gilson wrote:
>>
>> Bom Dia meus amigos,
>>
>> Eu preciso de replicar um banco de dados local para a WEB e faço isso
>> com o IBexpert,
>> Gostaria de saber se tem como eu criar alguma Trigger que faça isso
>> automaticamente ?
>>
>> Grato
>>
>>
>> Gilson Moreira dos Santos
>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista