Sincronizar bases de datos SQL Server en diferentes fuentes remotas

Los escenarios

Las aplicaciones usadas por representantes de ventas de viajes u otros trabajadores de campo – conductores de entregas, enfermeras visitantes, etc. son diseñadas para recolectar información de localizaciones remotas y entonces enviarla a un centro de datos. También, los datos del centro de datos ocasionalmente necesitan ser enviados de vuelta a estas localizaciones remotas, para tenerlas al día.

Por ejemplo, cuando las enfermeras visitan a un paciente, ellas ingresan la información acerca de la visita en una base de datos en dispositivos móviles. Al final del día, todas estas entradas creadas durante el día son enviadas a la base de datos central en un hospital. Después de eso, las enfermeras pueden sincronizar los dispositivos móviles con la base de datos en el centro de datos del hospital para obtener la nueva información acerca de sus pacientes, y también la información acerca de nuevas visitas que necesitan hacer al día siguiente.

En un escenario como este, hay una necesidad constantes de sincronizar la información desde un dispositivo móvil a una base de datos central.

Las soluciones

  1. Usar replicación de SQL Server. Esto sincroniza bases de datos copiando y distribuyendo entradas desde una de las bases de datos a otra cuando estas bases de datos están en diferentes localizaciones.

    Hay algunas limitaciones por las que la replicación de SQl Server no puede ser usada:

    • Sólo las ediciones Standard o Enterprise de SQL Server pueden actuar como Publisher, así que si usted está usando SQL Express, usted necesitaría hacer upgrade.
    • Una configuración con un SQL 2005 Publisher y SQL 2008 Subscriber no está soportada para aplicaciones web
    • Una versión Distributor debe ser mayor o igual a la versión Publisher
    • Una versión Subscriber en replicación transaccional debe estar entre dos versiones de la versión Publisher. Por ejemplo, un SQL Server 2000 Publisher no puede tener Subscribers SQL Server 2012
    • Una versión Subscriber en replicación de unión debe ser menor o igual a la versión Publisher. Por ejemplo, Subscribers SQL Server 2012 no pueden tener un Publisher SQL Server 2008
  2. Usar Sync Framework, una API que le permite construir aplicaciones y sincronizar bases de datos. Provee mucha flexibilidad, pero también requiere desarrollo, lo cual incrementa el costo y el tiempo de implementación.
  3. Usar ApexSQL Data Diff, una herramienta de comparación y sincronización de datos de SQL Server que detecta diferencias de datos y las resuelve sin errores. Puede comparar y sincronizar bases de datos y copias de seguridad nativas o nativamente comprimidas y generar reportes detallados acerca de las diferencias detectadas, crear un archivo de sincronización y ejecutarlo.

Cómo hacerlo

Imagine que usted tiene la base de datos Central en el centro de datos en el hospital y la base de datos Visits en el dispositivo móvil de la enfermera. El hospital añade entradas para las visitas en la tabla Visits, y las enfermeras sincronizan su dispositivo móvil cada mañana para obtener las últimas entradas para conocer cuál es su ruta para el día. Las entradas insertadas por las enfermeras durante el día son almacenadas en la tabla VisitReports.

  1. Inicie ApexSQL Data Diff
  2. Para Source, seleccione Database como el tipo, su centro de datos como el servidor y su base de datos central como la base de datos.
  3. Para Destination, seleccione Database como el tipo, un dispositivo remoto como el servidor (el dispositivo móvil de la enfermera) y finalmente la base de datos que será sincronizada

    Datasources type and details selection in ApexSQL Data Diff

  4. Haga clic en el botón

    Todas las tablas en estas bases de datos serán comparadas y mostradas en la cuadrícula principal.

    p>Main grid after SQL Server database comparison

    Las entradas insertadas en la tabla Visits en el hospital son mostradas en la pestaña Missing.

  5. Selecciones las tablas que desea sincronizar

    Checking the tables for database synchronization

  6. Haga clic en Synchronize en la pestaña

    Synchronize button in ApexSQL Data Diff

  7. Haga clic en Next en el paso Synchronization direction en Synchronization wizard
  8. En el paso Output options de Synchronization wizard, seleccione Synchronize a database como acción de salida

    Choosing output action in Synchronization wizard

  9. Haga clic en Next
  10. Verifique el resumen de acciones que serán realizadas y cualquier otro aviso que se muestre

    Summary of the actions and warnings preview

  11. Haga clic en el botón Synchronize de la pestaña
  12. Haga clic en OK en el diálogo de notificación

    SQL Server database change notification dialogue

    Cuando la sincronización de la base de datos destino esté completa, el siguiente mensaje será mostrado.

    Script execution results message

  13. Haga clic en el botón Save en la pestaña Home del proyecto para grabar los ajustes de la sincronización en un proyecto y realizar la sincronización fácil y rápidamente la siguiente vez.

Si en la noche necesita sincronizar las entradas que las enfermeras añadieron durante el día a sus bases de datos a las entradas en la base de datos centras, los pasos son similares:

  • Ajuste la base de datos en el dispositivo móvil para ser Source y la base de datos central para ser Destination.

    Selecting the SQL Server database Source and Destination

    1. Haga clic en Compare
    2. Seleccione la tabla en la cual las entradas han sido añadidas durante el día. Las entradas son mostradas en la pestaña Missing:

      Comparison and synchronization of the Source and Destination databases

    3. Haga clic en el botón Synchronize en el menú
    4. Vaya a través de Synchronization wizard y añada la entrada perdida a la base de datos Central
    5. Haga clic en Save en la pestaña Home del proyecto para grabar los ajustes de sincronización en un proyecto y realizar la sincronización fácil y rápidamente la siguiente vez

    Ahora que tiene proyecto grabados, usted puede automatizar los procesos de sincronización:

    1. Grabe el siguiente comando como un archivo batch: E:\Test\Morning.bat. Este ejecutará el proyecto 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
      

      Esto creará MorningSync.sql en la carpeta D:\Test para añadir los datos desde la base de datos central en la base de datos de la enfermera, creará una copia de seguridad completa de la base de datos de la enfermera en la carpeta D:\Test e insertará las entradas faltantes en la base de datos de la enfermera.

    2. Inicie SQL Server Management Studio
    3. En Object Explorer expanda SQL Server Agent, haga clic derecho en Jobs y seleccione New job

    4. Especifique el nombre del job

    5. En la pestaña Steps, haga clic en New para añadir un Nuevo paso al job
    6. Especifique un tipo “Operating system (CmdExec)” para esto, añada un nombre de paso, haga clic en Open
    7. Seleccione el archivo batch D:\Test\MorningSync.bat

      SQL Server job steps

    8. Haga clic en el botón OK
    9. Abra la pestaña Schedules y especifique cuándo debería ejecutarse el job de sincronización de bases de datos

      Scheduling a SQL Server job

    Repita los pasos 3 al 9 para programar un job SQL Server para la sincronización nocturna.

    Compara y sincronizar bases de datos SQL Server en localizaciones remotas con una base de datos SQL Server en el centro de datos usando ApexSQL Data Diff puede ser hecho sin importar las versiones de SQL Servers usados en las localizaciones central y remota, sin conocimientos de programación y bajo su completo control, hasta llegar al nivel de fila.

    Traductor: Daniel Calbimonte

    Diciembre 9, 2014