[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