none
Atualização de tabelas entre 2 Bancos SQL Server RRS feed

  • Pergunta

  • Olá bom dia.

    Gostaria de saber como eu poderia resolver o seguinte cenário:

    Possuo dois bancos Sql Server idênticos, sendo que o banco "A"  possui dados mais recentes que o banco "B".

    - Como poderia fazer a atualização dos dados de uma determinada tabela do banco "B", tomando o cuidado de não duplicar e inserir somente os dados não existentes nesse banco?

    - Existe alguma forma de realizar a sincronização entre o banco "A" e "B"  de forma automática?

    Utilizo SQL Server 2012 e C#.

    Por favor, se souberem...agradeço.


    Gilberto Otsuka

    terça-feira, 17 de maio de 2016 14:35

Respostas

  • Ter tem, mas vai dar um trabalho..

    E direto pelo bd não sei se tem como, Mas numa aplicação C# daria para voce criar a ConnectionString de cada banco, 

    E o fluxo seria mais ou menos o Seguinte:

    -Voce le o dado do Banco A com * from que seja... este sera retornado num DataSet

    -Voce percore o dataSet e para cada linha... (acho que da pra fazer com foreach)

    -Verifica se os dados dessa linha existem no banco  B > (Tenta dar um select com os dados do banco A indo como clausula, se nao retornar nada nao existe)

      -Se nao existir > Insere o dado no banco B

    -Se existir Ignora...

    Como se trata de um Banco de Dados, Sugiro que faça estes testes em um banco de Backup.

    A lógica da coisa é essa.. Eu não tenho nada pronto mas acredito que funcionara.. Se tiver alguma dúvida de como fazer isso mais detalhadamente eu vejo aqui como te ajudar..

    • Marcado como Resposta Marcos SJ quarta-feira, 18 de maio de 2016 14:56
    terça-feira, 17 de maio de 2016 15:18
  • Bom dia Gilberto,

    Cara a replicação de dados do SQL Server pode te atender para essa situação.

    A replicação de dados tem três tipos, Transacional, Merge e Snapshot, a mais comum é a Transacional e pode te atender, tanto qunato a snapshot que é mais simples depende do tamanho de suas tabelas, workload... eu utilizo no meu ambiente a replicação de dados transacional e me atende muito bem.

    Não é tão complexo de configurar, da uma estudada.

    Att

    Reginaldo Silva

    • Marcado como Resposta Marcos SJ quarta-feira, 18 de maio de 2016 14:56
    terça-feira, 17 de maio de 2016 15:24

Todas as Respostas

  • Ter tem, mas vai dar um trabalho..

    E direto pelo bd não sei se tem como, Mas numa aplicação C# daria para voce criar a ConnectionString de cada banco, 

    E o fluxo seria mais ou menos o Seguinte:

    -Voce le o dado do Banco A com * from que seja... este sera retornado num DataSet

    -Voce percore o dataSet e para cada linha... (acho que da pra fazer com foreach)

    -Verifica se os dados dessa linha existem no banco  B > (Tenta dar um select com os dados do banco A indo como clausula, se nao retornar nada nao existe)

      -Se nao existir > Insere o dado no banco B

    -Se existir Ignora...

    Como se trata de um Banco de Dados, Sugiro que faça estes testes em um banco de Backup.

    A lógica da coisa é essa.. Eu não tenho nada pronto mas acredito que funcionara.. Se tiver alguma dúvida de como fazer isso mais detalhadamente eu vejo aqui como te ajudar..

    • Marcado como Resposta Marcos SJ quarta-feira, 18 de maio de 2016 14:56
    terça-feira, 17 de maio de 2016 15:18
  • Bom dia Gilberto,

    Cara a replicação de dados do SQL Server pode te atender para essa situação.

    A replicação de dados tem três tipos, Transacional, Merge e Snapshot, a mais comum é a Transacional e pode te atender, tanto qunato a snapshot que é mais simples depende do tamanho de suas tabelas, workload... eu utilizo no meu ambiente a replicação de dados transacional e me atende muito bem.

    Não é tão complexo de configurar, da uma estudada.

    Att

    Reginaldo Silva

    • Marcado como Resposta Marcos SJ quarta-feira, 18 de maio de 2016 14:56
    terça-feira, 17 de maio de 2016 15:24
  • Olá Reginaldo,

    Lí sobre a replicação de de dados, muito interessante,mas estou utilizando a versão 2012 Express que é limitado nessa função.

    Obrigado por responder.


    Gilberto Otsuka

    segunda-feira, 23 de maio de 2016 13:35
  • Olá Marcos, 

    Vou seguir sua lógica.

    Obrigado por responder, abraço!


    Gilberto Otsuka

    segunda-feira, 23 de maio de 2016 13:37