[firebase-br] Replicar BD

Gustavo Luis Hinterholz gustavoluishinterholz em gmail.com
Qua Abr 2 14:37:04 -03 2014


Poisé, em uma empresa que trabalhei utilizavam 2 formas de sincronização
por aplicação ...
1 - Colocar um campo em cada tabela chamado "Sincronizado", toda vez que
fosse incluido ou alterado algo esse campo era colocado como "N", dai  o
sincronizador fazia um WHERE por esse campo com os registros que continham
"N" e sincronizava...

2 - Todo insert, update e delete eram colocados em uma tabela chama
Sincronizacao, ela tinha o nome da tabela a ser sincronizada, as chaves
dessas tabela para serem utilizadas pelo sincronizador através do WHERE ...
Feita a sincronização, removia o registro da tabela sincronizacao, a
vantagem que vi nessa forma, foi fazer um select nessa tabela e poder saber
o que ainda não foi sincronizado ...

As duas formas tem os prós e contras ...

Att
Gustavo Luis Hinterholz
9381-8192
*http://gustavohinterholz.blogspot.com.br/
<http://gustavohinterholz.blogspot.com.br/>* <http://www.gustavo/>


Em 2 de abril de 2014 14:28, Marcos Weimer <marcosweimer em gmail.com>escreveu:

> Aqui faço diferente
> tenho um campo DATA_CRIACAO_ALTERACAO
> que é atualizado por trigger no insert/update
> (para exclusão tem o campo DATA_BAIXA)
>
> Faço select nas tabelas especificas com DATA_CRIACAO_ALTERACAO > ultima
> sincronização, tem funcionado muito bem.
>
>
>
> -=Ma®©oS=-
> Marcos R. Weimer
> Delphi / C# / ASP.NET / PHP / WebServices / Firebird
>
>
>
> Em 2 de abril de 2014 14:23, Toy Ghilardi <toyhardcore em gmail.com>
> escreveu:
>
> > Ola Wesley,
> >
> > O recurso que citaram de "replicação" que o firebird tem é o shadows que
> > não tem nada a ver com o que você quer.
> >
> > Uma vez li um artigo que coloquei em prática que é o seguinte.
> >
> > Criar uma tabela onde você vai gravar todas alterações ocorridas no banco
> > de dados nas tabelas que tenha interesse.
> >
> > CREATE GENERATOR NEW_CHANGE_ID;
> >
> > CREATE TABLE CHANGES (
> >     CHANGE_ID           INTEGER NOT NULL,
> >     CHANGE_TYPE         CHAR(1) NOT NULL,
> >     SOURCE_KEY_FIELD    VARCHAR(100) NOT NULL,
> >     SOURCE_KEY          VARCHAR(100) NOT NULL,
> >     SOURCE_TABLE        VARCHAR(100),
> >     SOURCE_KEY_2        VARCHAR(100),
> >     SOURCE_KEY_FIELD_2  VARCHAR(100),
> >     TIPO                CHAR(1)
> > );
> > ALTER TABLE CHANGES ADD PRIMARY KEY (CHANGE_ID);
> >
> >
> >
> > SET TERM ^ ;
> >
> > /* Trigger: CHANGES_NEWID */
> > CREATE OR ALTER TRIGGER CHANGES_NEWID FOR CHANGES
> > ACTIVE BEFORE INSERT POSITION 0
> > AS
> > BEGIN
> >     NEW.CHANGE_ID = GEN_ID(NEW_CHANGE_ID,1);
> > END
> > ^
> > SET TERM ; ^
> >
> > Depois em cada tabela que tiver interesse em replicar, tu cria uma
> trigger
> > assim:
> >
> > SET TERM ^ ;
> > CREATE OR ALTER TRIGGER CLIENTES_REPL_INSERT FOR CLIENTES
> > ACTIVE AFTER INSERT POSITION 0
> > AS
> > declare variable vUser varchar(15);
> > BEGIN
> >     INSERT INTO CHANGES
> >       (CHANGE_TYPE, SOURCE_KEY_FIELD,
> >        SOURCE_KEY, SOURCE_TABLE,USERNAME)
> >     VALUES
> >       ('I', 'CODIGO_CLIENTE', NEW.CODIGO_CLIENTE, 'CLIENTES');
> > END
> > ^
> > SET TERM ; ^
> >
> > Bem, agora todos clientes que forem cadastrados o sistema irá registrar
> na
> > tabela changes.
> >
> > Basta você criar uma aplicação que fique rodando e com base nos dados
> > gravados em changes, pegue os valores na tabela clientes e gere um insert
> > para rodar no outro banco.
> >
> > Abraço!
> >
> >
> >
> > Em 2 de abril de 2014 09:11, Wesley Oliveira <wesley em rgsystem.com.br
> > >escreveu:
> >
> > > Olá pessoal!
> > >
> > >
> > >
> > > Pesquisei um pouco na internet e achei alguns replicadores Firebird que
> > não
> > > funcionaram como eu queria... Será que vocês têm alguma idéia?
> > >
> > > É o seguinte:
> > >
> > >
> > >
> > > Quero ter duas bases de dados iguais em dois locais separados. Exemplo:
> > >
> > >
> > >
> > > Vou disponibilizar o acesso ao sistema na rede interna, mas quero
> deixar
> > o
> > > acesso Web num servidor em nuvens... Então teria a base para acesso
> > Desktop
> > > em um servidor interno e a base para acesso Web no servidor em nuvem.
>> > > que
> > > como preciso das informações de ambos acessos EM AMBOS ACESSOS, preciso
> > que
> > > as bases sejam idênticas o tempo todo. Tem algum componente Delphi ou
> > > aplicativo que faz isso?
> > >
> > >
> > >
> > > Agradeço a atenção de todos!
> > >
> > >
> > > Att.
> > >
> > > Wesley Oliveira
> > > Programador de Sistemas de Informação
> > >
> > > RG System Informática
> > > Fone:      +55 (27) 3727-1127
> > > Celular:    +55 (27) 99606-0038
> > >
> > >
> > >
> > >
> > >
> > > ______________________________________________
> > > 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
> > >
> >
> >
> >
> > --
> > toyhardcore em gmail.com.br
> > ______________________________________________
> > 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
> >
> ______________________________________________
> 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