Synchroniser les bases de données SQL Server dans différentes sources distantes


Les scénarios

Les applications utilisées par des représentants commerciaux, ou d’autres agents de terrain comme les livreurs, les infirmières à domicile, etc… sont conçus pour recueillir des données à partir d’emplacements distants, puis de les envoyer à un centre de données. D’autre part, les données du centre de données, doivent parfois être renvoyées à ces endroits éloignés, pour les garder à jour.

Par exemple, chaque fois que les infirmières rendent visite à un patient, elles rentrent les informations sur la visite dans la base de données sur les périphériques mobiles. À la fin de la journée, toutes ces entrées créées au cours de la journée sont envoyées à la base de données centrale. Les infirmières peuvent synchroniser les appareils mobiles avec la base de données situées dans le Datacenter de l’hôpital dont ils obtiennent les nouvelles informations sur leurs patients ainsi que les informations sur les visites qu’elles auront à faire le lendemain.

Dans un scénario comme celui-ci, il est nécessaire de synchroniser constamment les informations d’un périphérique mobile à une base de données centrale.

Les solutions

  1. Utiliser la réplication SQL Server pour synchroniser les bases de données en copiant et en distribuant les enregistrements d’une base de données vers une autre base distante. Il y a quelques limitations, la réplication SQL Server ne peut pas être utilisée dans les cas suivants :

    • Seules les éditions Standard et Enterprise de SQL Server peuvent agir comme Publisher, si vous utilisez SQL Express, vous procéder à une mise à jour
    • Une configuration avec un Publisher sous SQL Server 2005 et un Subscriber sous SQL Server 2008 abonné n’est pas prise en charge pour la réplication web
    • La version du Distributor doit être supérieure ou égale à la version du Publisher
    • La version d’un Subscriber dans une réplication transactionnelle ne doit pas avoir plus de deux versions de décalage avec la version du Publisher. Par exemple : un Publisher sous SQL Server 2000 ne peut pas avoir de Subscriber sous SQL Server 2012
    • La version d’un Subscriber dans une réplication de fusion doit être inférieure ou égale à la version du Publisher. Par exemple : un Subscriber sous SQL Server 2012 ne peut pas avoir un Publisher sous SQL Server 2008.
  2. Utiliser Sync Framework, une API qui vous permet de créer des applications et de synchroniser plusieurs bases de données. Il offre beaucoup de souplesse, mais nécessite également des développements, ce qui augmente le coût et les délais de mise en œuvre.
  3. Utiliser ApexSQL Data Diff, un logiciel pour SQL Server permettant de comparer et de synchroniser des données entre plusieurs bases de données SQL Server. Il détecte les différences de données et les résout sans erreurs. Il est possible de comparer et de synchroniser des bases de données en direct, de faire des sauvegardes compressées ou non, de générer des rapports complets sur les différences détectées, de créer un fichier de synchronisation et de l’exécuter.

Comment faire

Imaginez que vous avez une base de données centrale dans le centre de données de l’hôpital, et la base de données des Visits sur le téléphone portable d’une infirmière. L’hôpital ajoute les enregistrements pour les visites dans la table Visits, les infirmières synchronisent leurs téléphones portable chaque matin pour obtenir les dernières informations sur leurs dossiers et consulter leurs tâches pour la journée. Les enregistrements insérés par les infirmières au cours de la journée, sont stockées dans la table VisitReports.

  1. Démarrez ApexSQL Data Diff
  2. Pour la Source, sélectionnez la base de données comme type de source, le centre de données comme serveur et la base de données centrale comme base de données
  3. Pour la Destination, sélectionnez la base de données comme type de source, un serveur distant (téléphone de l’infirmière), et enfin la base de données qui sera synchronisée

  4. Cliquez sur le bouton Compare
    Toutes les tables de la base de données seront comparées et visible dans la grille principale

    Les enregistrements insérés dans la table des visites à l’hôpital sont présentés dans l’onglet Missing

  5. Sélectionnez les tables que vous souhaitez synchroniser

  6. Cliquez sur Synchronize dans l’onglet Home

  7. Cliquez sur Next dans l’étape Synchronization direction de l’assistant de synchronisation

  8. Dans l’étape Output options de l’assistant de synchronisation, sélectionnez Synchronize a database comme une action de sortie

  9. Cliquez sur Next

  10. Consultez le résumé des actions qui seront effectuées ainsi que les avertissements

  11. Cliquez sur le bouton Synchronize sur l’onglet Home

  12. Cliquez sur OK dans la boîte de dialogue de notification

    Lorsque la synchronisation est terminée, le message suivant s’affichera :

  13. Cliquez sur le bouton Save de l’onglet Home du projet pour enregistrer les paramètres de synchronisation et ainsi la ré-exécuter facilement.

Si dans la soirée, vous devez synchroniser les dossiers que les infirmières ont ajoutés au cours de la journée à leurs bases de données avec les enregistrements de la base de données centrale, les étapes sont similaires:

  1. Définissez la base de données sur le téléphone comme Source et la base de données centrale comme Destination:

  2. Cliquez sur Compare

  3. Sélectionnez la table dans laquelle les enregistrements ont été ajoutés au cours de la journée. Les enregistrements sont affichés dans l’onglet Missing:

  4. Cliquez sur le bouton Synchronize dans le menu

  5. Dans l’assistant de synchronisation, ajoutez les enregistrements manquants à la base de données centrale
  6. Cliquez sur le bouton Save de l’onglet Home du projet pour enregistrer les paramètres de synchronisation et ainsi la ré-exécuter facilement.

Maintenant que vous avez enregistrés vos projets, vous pouvez automatiser les processus de synchronisation:

  1. Enregistrer le batch suivant dans le dossier E:\Test\Morning.bat . Celui-ci va exécuter le projet 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

    Le batch va créer le fichier MorningSync.sql dans le dossier « D:\Test\» pour ajouter les données de la base de données centrale dans la base de données de l’infirmière, créer une sauvegarde complète de la base de données de l’infirmière dans le dossier « D:\Test\» et insérer les enregistrements manquants dans la base de données de l’infirmière.

  2. Démarrez SQL Server Management Studio
  3. Dans l’Explorateur d’objets, dans SQL Server Agent, faites un clic droit sur Jobs et sélectionnez New job

  4. Indiquez le nom du Job

  5. Sur l’onglet Étapes, cliquez sur Nouveau pour ajouter une nouvelle étape au Job

  6. Spécifiez une étape de type ”Operating system (CmdExec)” et lui donner un nom, cliquez sur Open
  7. Sélectionnez le fichier de commandes enregistré D:\Test\MorningSync.bat

  8. Cliquez sur le bouton OK
  9. Ouvrez l’onglet Schedules et spécifiez à quel moment la tâche de synchronisation de base de données doit avoir lieu

Répétez les étapes 3 à 9 pour programmer un Job SQL Server pour la synchronisation du soir.

La comparaison et la synchronisation de bases de données SQL Server sur des sites distants en utilisant ApexSQL Data Diff, peut se faire indépendamment des versions de SQL Server utilisées. Et ce sans aucune connaissance en programmation, sous votre contrôle, depuis la base de données jusqu’au niveau des enregistrements.

Article traduit par Romain Casteres
Consultant en informatique décisionnelle et en Big Data chez Dcube. Il est MVP SQL Server, MCSE Data Platform et Business Intelligence.
Blog : http://pulsweb.fr
Twitter : @PulsWeb

October 20, 2014