Sincronizar bancos de dados SQL Server em diferentes fontes remotas

Os Cenários

As aplicações usadas por representantes de vendas, ou outros trabalhadores de campo – entregadores, enfermeiras, etc. são desenhadas para coletar dados de locais remotos e, em seguida, enviá-los para um data center. Ocasionalmente também são enviados de volta para estas aplicações remotas afim de mantê-los atualizados.

Por exemplo, sempre que os enfermeiros fazem uma visita a um paciente, eles adicionam as informações sobre a visita em uma base de dados no dispositivo móvel. No final do dia, todas estas entradas criadas durante o dia são enviadas para uma base de dados central no hospital. Dessa forma os enfermeiros poderão sincronizar os dispositivos móveis com o banco de dados no data center do hospital, para receber novas informações sobre seus pacientes e também sobre quaisquer outras novas visitas que serão feitas no dia seguinte.

Neste tipo de cenário, há sempre a necessidade de sincronizar as informações a partir de um dispositivo móvel junto a um banco de dados centralizado.

As Soluções

1. Use a replicação do SQL Server. Ela sincroniza os bancos de dados copiando e distribuindo os registros de um banco de dados para outro quando esses bancos de dados estão em locais diferentes.

Existem algumas limitações quanto a replicação do SQL Server:

  • Somente edições do SQL Server Standard ou Enterprise podem atuar como um Publisher, por isso, se você estiver usando o SQL Express, você terá que atualizar
  • Uma configuração com um SQL 2005 como Publisher e SQL 2008 Subscriber não é suportado para replicações web
  • O versionamento do Distributor deve ser maior ou igual a versão do Publisher
  • Em uma replicação transacional, o Subscriber não pode estar com uma defasagem superior a duas versões do Publisher, por exemplo, um Publisher SQL 2000 não pode ter um Subscriber SQL 2012 inscrito
  • Em uma replicação merge, o Subscriber só pode ser igual ou inferior a versão do Publisher, por exemplo, um Subscriber SQL 2012 não possui um Publisher SQL 2008

2. Usando o Sync Framework, uma API que permite que você construa aplicações e sincronize entre bancos de dados. Ele oferece mais flexibilidade, mas também exige o desenvolvimento, o que aumenta o custo e os prazos de implementação.

3. Use ApexSQL Data Diff, uma ferramenta de comparação e sincronização de dados SQL Server que detecta diferenças de dados e resolve conflitos sem erros. Ela pode comparar e sincronizar bancos de dados em tempo real ou através de backups de banco de dados nativos ou nativamente compactados e gerar relatórios abrangentes sobre as diferenças detectadas, criando um arquivo de sincronização e executando.

Como fazer

Imagine que você tenha uma base de dados central no data center do hospital e o banco de dados Visitas em um dispositivo móvel de uma enfermeira. O hospital acrescenta os registros para as visitas na tabela de Visitas, e as enfermeiras sincronizam seus dispositivos móveis todas as manhãs para obter as últimas fichas e descobrir seus destinos para o dia. Os registros inseridos pelas enfermeiras, durante o dia, são armazenados na tabela VisitReports.

  1. Inicie o ApexSQL Data Diff
  2. Como Origem, selecione Banco de Dados seu servidor SQL Server e sua base de dados central como Base de Dados de origem
  3. Como Destino, selecione Banco de Dados, em servidor remoto adicione o dispositivo remoto (dispositivo remoto da enfermeira) e finalmente a base de dados que será sincronizada

    Datasources type and details selection in ApexSQL Data Diff

  4. Clique o botão Compare

    Todas as tabelas nesta base de dados serão o comparadas e exibidas em Main grid

    Main grid after SQL Server database comparison

    Os registros inseridos na tabela Visitas são exibidas na guia Missing

  5. Selecione as tabelas que você deseja sincronizar

    Checking the tables for database synchronization

  6. Clique em Sincronize na guia Home

    Synchronize button in ApexSQL Data Diff

  7. Na etapa de Synchonization direction em Synchronization wizard clique em Next
  8. Na etapa de Output options selecione Synchonize a database como saída da ação

    Choosing output action in Synchronization wizard

  9. Clique em Next
  10. Confira o resumo das ações que serão executadas e quaisquer avisos mostrados

    Summary of the actions and warnings preview

  11. Clique em Synchonize na guia Home
  12. Clique em OK na caixa de notificação

    SQL Server database change notification dialogue

    Quando a sincronização com a base de destino for concluída, a seguinte mensagem será exibida

    Script execution results message

  13. No projeto, clique o botão Save na guia Home Home para salvar as configurações de sincronização no projeto, isto facilitará o processo em uma próxima vez

Se durante a noite, você precisar sincronizar os registros que os enfermeiros adicionaram durante o dia no seus bancos de dados, para os registros no banco de dados central, as etapas são semelhantes:

  1. Selecione a base de dados do dispositivo móvel como Source e a base de dados central como Destination

    Selecting the SQL Server database Source and Destination

  2. Clique em Compare
  3. Selecione a tabela que possui os registros que foram adicionados durante o dia. Os registros são exibidos na guia Missing

    Comparison and synchronization of the Source and Destination databases

  4. Clique o botão Synchonize no menu superior
  5. Vá pelo Synchronization wizard e adicione os registros faltantes para a base de dados central
  6. Clique em Save na guia Home do projeto, para salvar as configurações de sincronização do projeto, isso facilitará o processo em uma próxima vez

Agora que o projeto está salvo, você pode automatizar o processo de sincronização:

    1. Salve o comando a seguir em um arquivo de lote, exemplo E:\Test\Morning.bat, que irá executar o projeto Morning_Central_Nurse.axdd:

      "C:\Program files 
      (x86)\ApexSQL\ApexSQLDataDiff2014\ApexSQLDataDiff.com" /
      pf:D: \Test\Morning_Central_Nurse.axdd /
      of:D: \Test\MorningSync.sql / sync / bu:D: \Test / v / f
      

      Será criado um arquivo chamado MorningSync.sql na pasta E:\Test. Para adicionar os dados da base de dados central nos dispositivos móveis das enfermeiras, crie um backup completo da base de dados Nurses na pasta E:\Test e insira os registros faltantes na base de dados Nurses.

    2. Inicie o SQL Server Management Studio
    3. Em Object Explorer expanda o SQL Server Agent, clique o botão direito em Jobs e selecione New job

    4. Especifique o nome do job

    5. Em Steps, clique em New e adicione um novo passo para o Job
    6. Escolha o tipo “Operating system(CmdExec)”, adicione um nome para o passo, clique Open
    7. Selecione o arquivo salvo no exemplo E:\Test\MorningSync.bat

      SQL Server job steps

    8. Clique o botão OK
    9. Abra Schedules e especifique quando a sincronização deverá ocorrer

      Scheduling a SQL Server job

Repita os passos 3 até 9 para agendar um trabalho do SQL Server para cada sincronização.

Comparar e sincronizar bancos de dados SQL Server em locais remotos com um banco de dados SQL Server no datacenter usando ApexSQL Data Diff, pode ser feito independentemente das versões de SQL usados nos locais remotos e centrais, sem nenhum conhecimento de programação e sob o seu controle completo, até o nível de linha.

Tradução: Ricardo Leka Roveri

September 2, 2015