Olá pessoal, tenho 2 sistema que possui 2 bancos (Cada um com seu banco). Um banco principal e um caixa. Algumas informações precisam ser transferidas de um banco para o outro e vise-versa (vendas, itens da venda, saldo dos produtos) de tempos em tempos. Qual seria a melhor forma de fazer isso? Já procurei formas de fazer isso mas nenhuma delas me mostra com clareza como fazer isso.
Obs: se um banco estiver em uma maquina e o outro estiver em outra e por algum motivo a comunicação se perca (alguma maquina é desligada) devesse manter os dados em contingencia para quando houver uma comunicação eles serem transferidos.
O sistema é Java Desktop.
Se sabe criar conexao para 1 banco, pode criar outra conexao para outro banco.
Olá javaflex! Criar a conexão é bem fácil, o problema é quando não tiver a conexão como fazer o controle das contingências. O caixa envia o dado para o Principal. O principal não está disponível. Como tratar isso?
Trata a exception. Se der erro ao conectar em um banco você conecta no outro.
Ainda não era isso que eu quero. Imagine o seguinte cenário. Estou no caixa e faço uma venda, essa informação é inserida no meu caixa vai pro banco principal (replicada), faço outra venda, de novo vai pro banco caixa e replica pro principal. Opa caiu a conexão com o banco principal. E agora? Como controlar as contingencias? (Dados que ficam salvos em um banco mas não no outro) O lado do principal não sabe que não chegou informação. O lado do caixa sabe que enviou a informação mas não chegou no principal e registrou somente no proprio banco (caixa). (Corrigindo nesse caso são 2 sistemas cada um com seu banco). Como fazer o controle de contingencia? Como o sistema se comportaria para saber qual informação está em contingencia e qual não está?
Sua pergunta está muito abrangente. De forma abrangente você terá que criar um job pra sincronizar as bases.
Verdade, qual seria a melhor forma de criar isso? Sockets, RMI…?
Nao sei qual banco está usando, mas pesquise sobre espelhamento de banco de dados com o SGDB que estiver usando. Assim nao terá grandes trabalhos. A exemplo do SQL Server:
https://docs.microsoft.com/pt-br/sql/database-engine/database-mirroring/database-mirroring-and-replication-sql-server?view=sql-server-ver15
Quando tem que ser manual, prefiro criar job no próprio banco através de stores procedures, sem overhead de aplicacoes intermediárias, por ser mais performático. Se forem servidores diferentes pode usar DbLink.
1 curtida
Fiz isso e deu muito certo, obrigado!