none
Replicação Servidor Local para Servidor Web RRS feed

  • Pergunta

  • Olá, tenho o seguinte problema:

    em um dos meus clientes existe um pequeno software para controle de pedidos com SQL Server 2005, preciso fazer uma replicação de hora em hora dos dados deste servidor para um outro servidor SQL Server 2005 em uma empresa de host via web.

    Tentei algumas opções e sempre esbarrei no problema de compartilhar a pasta do snapshot para a replicação, ou seja, como fazer o servidor SQL Web acessar os dados do snapshot na máquina da aplicação?

    As soluções que encontrei são complexas e não me dão 100% de certeza de que vão funcionar, por exemplo, compartilhar uma pasta no windows e fazer um portforward no roteador com um serviço de DNS como o dyndns ou no-ip.

    Algum de vocês pode me dar alguma idéia de como fazer isso?

    O servidor da aplicação é super simples com Windows XP SP2, solução caseira, acesso apenas na rede local...
    O servidor web é uma máquina em um host profissional com Windows 2003, DNS para acesso externo configurado, etc, etc...

    Muito obrigado desde já.
    • Editado Tiziu segunda-feira, 10 de agosto de 2009 19:13 faltou agradecimento
    • Movido Gustavo Maia Aguiar segunda-feira, 10 de agosto de 2009 21:26 (De:SQL Server - Desenvolvimento Geral)
    segunda-feira, 10 de agosto de 2009 19:12

Respostas

  • Tiziu,

    É possível sim você realizar o backup, basta ter acesso ao servidor.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 11 de agosto de 2009 12:56
    Moderador
  • Obrigado pela ajuda, resolvi da seguinte forma:

    1) Criei um job no SQL Local pra gerar um backup de hora em hora
    2) Criei um arquivo .bat que envia o arquivo do backup via ftp para o servidor web e adicionei uma tarefa agendada no windows para rodar esse BATCH de hora em hora
    3) Criei um job no SQL Web para rodar o restore de hora em hora

    Obrigado a todos.
    • Marcado como Resposta Tiziu quinta-feira, 13 de agosto de 2009 19:33
    quinta-feira, 13 de agosto de 2009 19:32

Todas as Respostas

  • Tiziu,

    Quais foram as soluções que você encontrou?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    segunda-feira, 10 de agosto de 2009 19:26
    Moderador
  • Olá Junior,

    as soluções que encontrei foram replicação merge, espelhamento ou alterar o código da aplicação pra cadastrar em dois bancos diferentes (vai ser minha última opção)...

    Nas duas primeiras soluções eu esbarro no problema de compartilhar uma pasta do servidor da aplicação com o servidor na web. Se eu encontrasse uma forma de fazer esse compartilhamento de forma simples resolveria o problema...

    A estrutura da rede do cliente possui um modem / roteador configurado, isso impede que eu compartilhe a pasta e a acesse apenas pelo IP do servidor, pra essa solução funcionar precisaria de porforward no roteador, algo que não gostaria de fazer pois vai me dar bastante dor de cabeça, além de não ser eu o responsável pela rede do cliente.
    segunda-feira, 10 de agosto de 2009 19:35
  • Tiziu,

    Realmente estas soluções você ira esbarrar nas permissões e configurações de acesso.


    Mas neste caso não consigo imaginar outra possibilidade?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    segunda-feira, 10 de agosto de 2009 20:01
    Moderador
  • Oi Tiziu,

    quem sabe uma outra solução para o seu problema seja criar um pacote do ETL para transferir os registros para o seu servidor... depois é só criar um job para rodar esse pacote de hora em hora... 
    alterar a sua aplicação como você comentou pode nao ser legal por causa do lag que vc pode ter, já que está enviando informações para um servidor externo, pela internet... o cliente pode nao gostar do aumento no tempo de espera para cada transação.. 
    usando um pacote do ETL vc pode resolver isso.. utillizando o componente Slowly Change Dimension que tem no integration services, vc pode configurar quais as colunas chaves na sua tabela e ele automaticamente irá comparar a fonte com o destino e fazer o insert ou update, conforme necessário.. 

    acredito que essa seria a melhor solução para o seu caso, na minha opinião..

    abraço,

    Felipe Ferreira
    http://weblogs.asp.net/felipeferreira
    MCT, MCITP, MCPD, 5X MCTS
    segunda-feira, 10 de agosto de 2009 20:51
  • Felipe,

    Utilizar um pacote ETL poderia ser uma boa solução, mas você não acha pode acabar acontecendo gargalos no envio dos dados de um servidor para o outro?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    segunda-feira, 10 de agosto de 2009 23:56
    Moderador
  • Fala Galvão, tudo bem? 

    realmente... se a quantidade de dados for grande, isso pode ser um gargalo... mas no caso específico do Tiziu, ele disse que é uma aplicação pequena, que roda em um servidor com windows xp... logo, eu fiz uma suposição de que a quantidade de transações por hora seria baixo... logo a quantidade de informações para enviar seria menor...
    mas... de qualquer forma.. mesmo que ele conseguisse configurar a replicação, o link de internet dele seria um gargalo tbm.. 

    ah... pensando um pouco mais, acabei lembrando tbm do Web Syncronization for Merge Replication... se a gente utilizar a replicação do tipo Merge é possível configurar a sincronização pela Web, utilizando HTTPS... nunca utilizei em produção, mas seria legal fazer um teste para ver como essa opção se comporta, quem sabe seja até mais simples que o ETL: http://msdn.microsoft.com/en-us/library/ms151763.aspx


    Tiziu, se você puder fornecer mais informações sobre a aplicação, quem sabe a gente consiga lhe ajudar melhor.. qtdade de usuarios simultaneos, qtdade de transacoes/seg... algumas das tabelas que vao ser replicadas contem campos BLOB? (varbinary, binary, image) 



    Felipe Ferreira
    http://weblogs.asp.net/felipeferreira
    MCT, MCITP, MCPD, 5X MCTS
    terça-feira, 11 de agosto de 2009 00:25
  • Felipe,

    Tudo bem!!!

    Então foi justamente isso que pensei vai depender do volume de dados e da aplicação.

    Em relação ao Web Syncronization for Merge Replication é uma alternativa fantástico, ainda mais por trabalhar sobre os recursos do HTTPs, fazendo uso das funcionalidades de sincronização e autenticação Web.

    Eu também nunca utilizei mas já houvi muito sobre este recurso, particularmente gosto bastante da replicação Merge, mas prefiro a replicação Transacional.

    Não tenho certeza, mas utilizar o Web Syncronization é mais simples que desenvolver um pacote ETL, ainda mais por estarmos trabalhando diretamente sobre a camada Web sem necessitar de componentes externos ou para o tratamento dos dados.


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 11 de agosto de 2009 00:37
    Moderador
  • Olá,

    Júnior e Felipe.

    Concordo com vocês.

    Usar a repliucação sobre HTTP pode funcionar sim.

    Apenas na hora de configurar que é um pouco chato. Pra quem já trabalho com adminisitração do IIS fica mais simples, senão é chatinho mesmo.

    Eu já trabalhei um pocuo em ambiente de testes esse tipo de configuração, mas como vocês nunca em produção.

    Dependendo do cenário sequer precisaremos nos preocupar com resolução de conflitos.


    Freddie Guimarães -
    MCT / MCITP Database Administrator 2005&2008 / MCP - SQL Server Database Administrator
    "O preço pago pela disciplina é muito menos que o preço do arrependimento"
    terça-feira, 11 de agosto de 2009 11:53
  • Opa, vou dar uma olhada no ETL e na replicação com HTTPS.

    A aplicação é bem simples mesmo, devem ser cadastrados 10 a 20 registros por hora no máximo.

    São pedidos com dados do cliente e dados de produtos, em média cada pedido tem 10 produtos vinculados a ele, então estamos falando de algo muito pequeno mesmo...

    Existe alguma forma de fazer um backup em um servidor remoto? Por exemplo, o arquivo .bak gerado pelo backup no servidor local ser salvo direto no meu servidor web. Pensei em uma alternativa de fazer backup/restore diferencial direto no servidor web...

    Muito obrigado pelas respostas, não imaginei receber tantas informações em tão pouco tempo.

    Abraços.
    terça-feira, 11 de agosto de 2009 12:18
  • Tiziu,

    É possível sim você realizar o backup, basta ter acesso ao servidor.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 11 de agosto de 2009 12:56
    Moderador
  • Opa,

    tem como dar um help sobre o backup do SQL Server 2005 em um servidor remoto? Procurei e li vários artigos e não obtive sucesso, só consegui setar a pasta de destino do backup como uma pasta local...

    Preciso definir a pasta de backup, por exemplo, para ftp.dominio.com.br/pasta ou http://dominio.com.br/pasta

    Obrigado desde já.
    quinta-feira, 13 de agosto de 2009 17:22
  • Tiziu,

    Neste caso, você teria que habilitar um servidor FTP ou HTTP para hospedar estes arquivos.


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 13 de agosto de 2009 19:22
    Moderador
  • Obrigado pela ajuda, resolvi da seguinte forma:

    1) Criei um job no SQL Local pra gerar um backup de hora em hora
    2) Criei um arquivo .bat que envia o arquivo do backup via ftp para o servidor web e adicionei uma tarefa agendada no windows para rodar esse BATCH de hora em hora
    3) Criei um job no SQL Web para rodar o restore de hora em hora

    Obrigado a todos.
    • Marcado como Resposta Tiziu quinta-feira, 13 de agosto de 2009 19:33
    quinta-feira, 13 de agosto de 2009 19:32
  • Tiziu,

    Valeu, muito obrigado pelo retorno.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 14 de agosto de 2009 23:36
    Moderador