Exporter (0) Imprimer
Développer tout

Comprendre et éviter les boucles de synchronisation

Mis à jour: février 2014

 

 

Bienvenue dans Synchronisation des données SQL (Aperçu). Cette rubrique est la quatrième d'une série de cinq. Nous vous conseillons de lire l'ensemble de ces rubriques avant de concevoir et d'implémenter un plan de synchronisation des données. Les cinq rubriques préliminaires sont les suivantes :

Le plug-in Synchronisation des données SQL Microsoft Azure a été désactivé sur le portail Microsoft Azure Silverlight. À partir de maintenant, utilisez le portail de gestion Microsoft Azure pour la synchronisation des données SQL Azure.

Vous accédez à la synchronisation des données SQL (aperçu) via l'onglet SYNC sous Base de données SQL, dans le portail de gestion Microsoft Azure. L'onglet SYNC n'est disponible que si vous disposez d'un ou plusieurs groupes de synchronisation. Consultez la rubrique Procédure : créer un groupe de synchronisation (SDS) pour obtenir de l'aide sur la création et la modification d'un groupe de synchronisation à partir de ce portail.

Consultez la section Navigation ci-dessous pour obtenir des liens vers les rubriques que vous devez lire avant de commencer, ainsi que des conseils pour la création et la modification des groupes de synchronisation.

Une boucle de synchronisation est le résultat d'un chevauchement de bases de données dans au moins deux groupes de synchronisation, telle une modification dans une base de données d'un groupe de synchronisation qui est réécrite dans cette même base de données par un autre groupe de synchronisation. Les boucles de synchronisation se reproduisent et peuvent aboutir à de grandes quantités de données qui remplacent à plusieurs reprises des données identiques dans au moins deux bases de données.

Les situations suivantes peuvent provoquer une boucle de synchronisation.

  • Une référence circulaire dans une base de données ou une table.

  • Une référence circulaire impliquant deux groupes de synchronisation minimum.

  • Une base de données enregistrée auprès de différents agents et ajoutée au groupe de synchronisation sous deux agents minimum.

Lorsque vous concevez vos topologies de synchronisation, il est normal de disposer d'une seule base de données dans plusieurs groupes de synchronisation. La Figure 1 en est une illustration. Même si la base de données A est partagée par les groupes de synchronisation 1 et 2, il n'y a aucune boucle de rétroaction qui reproduit les mêmes données écrites et réécrites dans la même base de données. Il est également possible de partager plusieurs bases de données entre deux groupes de synchronisation et de ne pas avoir de boucle. Nous traiterons ces configurations plus loin dans cette rubrique.

Parcourons la séquence des événements qui ont lieu lorsqu'une modification est apportée à une base de données dans la Figure 1. Nous supposerons que la modification est apportée à la base de données C ici.

  1. La ligne 1 dans la base de données C est modifiée.

  2. Dans les métadonnées de la base de données C, un enregistrement est créé, indiquant que la ligne 1 a été modifiée et l'origine de la modification.

  3. Le groupe de synchronisation 1 synchronise.

    1. Il remarque que la ligne 1 de la base de données C est modifiée par quelqu'un d'autre que SG1.

    2. La ligne 1 de la base de données C est écrite dans le concentrateur SG1.

    3. Un enregistrement est créé dans les métadonnées de SG1, indiquant que la ligne 1 a été modifiée par SG1.

    4. La ligne 1 de SG1 est écrite dans la base de données A.

    5. Un enregistrement est créé dans les métadonnées de la base de données A, indiquant que la ligne 1 a été modifiée par SG1. Fin de la synchronisation du groupe de synchronisation 1.

Si aucune nouvelle modification n'est apportée aux bases de données lors de la synchronisation suivante, aucune donnée n'est écrite dans les bases de données.

Figure 1 : Deux groupes de synchronisation qui partagent une base de données. Aucune boucle de synchronisation

La même séquence se déroule dans le sens opposé (par rapport à la Figure 1) si la modification est commencée dans la base de données D.

Parcourons la séquence des événements qui ont lieu lorsqu'une modification est apportée à une base de données dans la Figure 2. De nouveau, nous supposerons que la modification est apportée à la base de données C.

  1. La ligne 1 dans la base de données C est modifiée.

  2. Dans les métadonnées de la base de données C, un enregistrement est créé, indiquant que la ligne 1 a été modifiée et l'origine de la modification.

  3. Le groupe de synchronisation 1 synchronise.

    1. Il remarque que la ligne 1 de la base de données C est modifiée par quelqu'un d'autre que SG1.

    2. La ligne 1 de la base de données C est écrite dans le concentrateur SG1.

    3. Un enregistrement est créé dans les métadonnées de SG1, indiquant que la ligne 1 a été modifiée par SG1.

    4. La ligne 1 de SG1 est écrite dans les bases de données A et B.

    5. Un enregistrement est créé dans les métadonnées des bases de données A et B, indiquant que la ligne 1 a été modifiée par SG1.

    Fin de la synchronisation du groupe de synchronisation 1.

  4. Le groupe de synchronisation 2 synchronise.

    1. Il remarque que cette ligne 1 de la base de données A (ou B) est modifiée par un groupe autre que le groupe de synchronisation 2 (SG2).

    2. La ligne 1 de la base de données A est écrite dans le concentrateur SG2.

    3. Un enregistrement est créé dans les métadonnées de SG2, indiquant que la ligne 1 a été modifiée par SG2.

    4. La ligne 1 de SG2 est écrite dans les bases de données B (ou A) et D.

    5. Un enregistrement est créé dans les métadonnées des bases de données B (ou A) et D, indiquant que la ligne 1 a été modifiée par SG2.

    Fin de la synchronisation du groupe de synchronisation 2.

Si aucune nouvelle modification n'est apportée aux bases de données la prochaine fois que SG1 synchronise, il remarque une modification dans la base de données A (ou B) qu'il n'a pas effectué (elle a été apportée par SG2 au cours du dernier cycle). Bien que les données ne soient pas différentes de celles des bases de données dans les deux groupes de synchronisation, elles sont traitées comme des données modifiées et le cycle de synchronisation ci-dessus est réexécuté indéfiniment.

Il est utile de noter que lorsque l'exemple de boucle de synchronisation implique une seule ligne, ce qui est vrai pour une ligne l'est aussi pour un nombre quelconque de lignes. Imaginez une base de données contenant un million de lignes où 1 % des lignes inchangées sont modifiées dans chaque cycle de synchronisation. Après un cycle, une boucle infinie de 10 000 lignes se produit. Après deux cycles, une boucle de 10 000 lignes plus 9 900 lignes supplémentaires, soit un total de 19 900 lignes, se produit. Et le nombre de lignes dans la boucle continue à augmenter, sans jamais diminuer.

Figure 2 : Deux groupes de synchronisation avec une boucle de synchronisation

La Figure 3 illustre une situation plus complexe où la boucle n'est pas aussi facile à identifier que dans la Figure 2.

La Figure 3 comporte trois groupes de synchronisation. Chaque groupe de synchronisation a un concentrateur et deux autres bases de données. Chaque base de données est partagée par deux groupes de synchronisation, mais aucune paire de groupes de synchronisation ne partage les deux mêmes bases de données.

  • SG1 : A et B

  • SG2 : B et C

  • SG3 : C et A

Parcourons la séquence des événements qui ont lieu lorsqu'une modification est apportée à une base de données dans la Figure 3. Nous supposerons que la modification est apportée à la base de données A.

  1. La ligne 1 dans la base de données A est modifiée.

  2. Dans les métadonnées de la base de données A, un enregistrement est créé, indiquant que la ligne 1 a été modifiée et l'origine de la modification.

  3. Le groupe de synchronisation 1 synchronise.

    1. Il remarque que cette ligne 1 de la base de données A est modifiée par un groupe autre que le groupe de synchronisation 1 (SG1).

    2. La ligne 1 de la base de données AC est écrite dans le concentrateur SG1.

    3. Un enregistrement est créé dans les métadonnées de SG1, indiquant que la ligne 1 a été modifiée par SG1.

    4. La ligne 1 de SG1 est écrite dans la base de données B.

    5. Un enregistrement est créé dans les métadonnées de la base de données B, indiquant que la ligne 1 a été modifiée par SG1.

    Fin de la synchronisation du groupe de synchronisation 1.

  4. Le groupe de synchronisation 2 synchronise.

    1. Il remarque que cette ligne 1 de la base de données B est modifiée par un groupe autre que le groupe de synchronisation 2 (SG2).

    2. La ligne 1 de la base de données B est écrite dans le concentrateur SG2.

    3. Un enregistrement est créé dans les métadonnées de SG2, indiquant que la ligne 1 a été modifiée par SG2.

    4. La ligne 1 de SG2 est écrite dans la base de données C.

    5. Un enregistrement est créé dans les métadonnées de la base de données C, indiquant que la ligne 1 a été modifiée par SG2.

    Fin de la synchronisation du groupe de synchronisation 2.

  5. Le groupe de synchronisation 3 synchronise.

    1. Il remarque que cette ligne 1 de la base de données C est modifiée par un groupe autre que le groupe de synchronisation 3 (SG3).

    2. La ligne 1 de la base de données C est écrite dans le concentrateur SG3.

    3. Un enregistrement est créé dans les métadonnées de SG3, indiquant que la ligne 1 a été modifiée par SG3.

    4. La ligne 1 de SG3 est écrite dans la base de données A.

    5. Un enregistrement est créé dans les métadonnées de la base de données A, indiquant que la ligne 1 a été modifiée par SG3.

    Fin de la synchronisation du groupe de synchronisation 3.

Si aucune nouvelle modification n'est apportée à l'une des bases de données la prochaine fois que SG1 synchronise, il note que cette ligne 1 dans la base de données A a été modifiée par un groupe autre que SG1. Cette modification est traitée par SG1 comme une modification complètement différente, bien que les données soient identiques dans toutes les bases de données et concentrateurs. Donc le cycle de synchronisation entier se répète à l'infini.


Figure 3 : Trois groupes de synchronisation avec une boucle de synchronisation

La clé pour éviter les boucles de synchronisation consiste à éviter d'avoir un chemin d'accès par lequel une modification de données dans un groupe de synchronisation est réécrite dans la base de données d'origine par un autre groupe de synchronisation. Trois solutions s'offrent à vous pour cela.

  • Concevez votre système de synchronisation de façon à ce que boucles ne puissent pas exister.

    Par exemple :

    Dans la Figure 2, vous pourriez supprimer base de données A ou B de la zone partagée.

    Dans la Figure 3, vous pourriez supprimer n'importe quelle base d'un groupe de synchronisation et vous arrêteriez la boucle.

  • Utilisez le filtrage de ligne.

    Si vous créez des filtres mutuellement exclusifs lorsque vous configurez chaque groupe de synchronisation, aucun groupe de synchronisation ne synchronisera les mêmes données.

    Par exemple :

    Dans la Figure 2, vous pourriez ajouter le filtre de lignes Area = "NA" à un groupe de synchronisation et le filtre Area = "EU" à l'autre.

  • Utilisez la direction de synchronisation.

    Par exemple :

    Si vous définissez les directions de synchronisation tel que l'illustre la Figure 4, vous n'avez plus de boucle.

Figure 4 : Utiliser la direction de synchronisation pour empêcher les boucles

Le service Synchronisation des données SQL (Aperçu) est une fonctionnalité de la Base de données SQL. Dans le portail de gestion Azure, vous pouvez effectuer toutes les tâches nécessaires pour créer, déployer et modifier un groupe de synchronisation.

 

Créer un groupe de synchronisation

Six étapes sont requises pour créer un groupe de synchronisation dans le portail de gestion Azure. Les détails de chaque étape sont accessibles via les liens suivants.

  1. Connectez-vous au Portail de gestion de la Base de données SQL Azure
    Synchronisation des données SQL (Aperçu) apparaît sous forme d'onglet, sous la Base de données SQL, uniquement après que vous avez créé un groupe de synchronisation.

  2. Installer un Agent client pour l'Aperçu de synchronisation des données SQL

  3. Inscrire une base de données SQL Server auprès d'un agent client

  4. Créer votre groupe de synchronisation (SDS)

  5. Définir vos données de synchronisation (SDS)

  6. Configurer votre groupe de synchronisation (SDS)

Modifier un groupe de synchronisation

Modifiez un schéma de groupe de synchronisation en ajoutant/supprimant des tables ou des colonnes dans le groupe, ou en modifiant la largeur d'une colonne ou un type de données. Les détails sont accessibles via les liens.

Voir aussi

Afficher:
© 2014 Microsoft