Comment la réplication de fusion gère l'expiration des abonnements et le nettoyage des métadonnées

Un abonnement à une publication de fusion expire s'il n'est pas synchronisé avec le serveur de publication pendant la période de rétention de publication. La période de rétention par défaut est de 14 jours, elle est définie à l'aide des paramètres @retention et @retention_period_unit de sp_addmergepublication (Transact-SQL). Le paramètre @retention_period_unit nécessite un niveau de compatibilité de publication de 90RTM ou supérieur. Pour les abonnés exécutant des versions précédentes de Microsoft SQL Server, @retention_period_unit est toujours défini à « jour ». Pour plus d'informations sur le niveau de compatibilité, consultez la section « Niveau de compatibilité pour les publications de fusion » dans la rubrique Utilisation de plusieurs versions de SQL Server dans une topologie de réplication.

Lorsqu'un abonnement arrive à expiration, il doit être réinitialisé, car les métadonnées de l'abonnement sont supprimées (consultez la section « Nettoyage des métadonnées » dans cette rubrique pour plus d'informations). Les abonnements qui ne sont pas réinitialisés sont supprimés par le travail de nettoyage d'abonnement arrivé à expiration sur le serveur de publication. Ce travail est exécuté tous les jours par défaut, et supprime tous les abonnements par envoi de données (push) qui n'ont pas été synchronisés pour une durée égale à deux fois la période de rétention de publication. Exemple :

  • Si la période de rétention d'une publication est de 14 jours, un abonnement peut arriver à expiration s'il n'a pas été synchronisé pendant 14 jours.

    Si le serveur de publication exécute SQL Server 2005 ou version ultérieure et que l'Agent de l'abonnement provient de SQL Server 2005 ou version ultérieure, un abonnement n'arrive à expiration que si des modifications de données se sont produites dans la partition de cet abonnement. Par exemple, supposons qu'un abonné ne reçoive de données client que de clients en Allemagne. Si la période de rétention est définie à 14 jours, l'abonnement arrive à expiration au jour 14 uniquement si des modifications des données des clients allemands se sont produites dans les 14 derniers jours.

  • L'abonnement peut être réinitialisé entre 14 et 27 jours après la dernière synchronisation.

  • 28 jours après la dernière synchronisation, l'abonnement est supprimé par le travail de nettoyage d'abonnement arrivé à expiration. Si un abonnement par envoi de données (push) arrive à expiration, il n'est pas totalement supprimé, contrairement aux abonnements par extraction de données (pull). Vous devez nettoyer les abonnements par extraction de données (pull) sur l'Abonné. Pour plus d'informations, consultez Procédure : supprimer un abonnement par extraction (programmation Transact-SQL de la réplication).

Règles de paramétrage de la période de rétention de publication

Notez bien les éléments suivants lors du paramétrage de la période de rétention pour les publications de fusion :

  • Le nettoyage des métadonnées de réplication de fusion dépend de la période de rétention de publication :

    • La réplication ne peut pas nettoyer les métadonnées dans les bases de données de publication et d'abonnement tant que la période de rétention n'est pas atteinte. Utilisez avec précaution les valeurs de période de rétention élevées, car cela peut nuire aux performances de réplication. Vous avez intérêt à spécifier une valeur faible si vous êtes certain que tous les abonnés procéderont à la synchronisation plus fréquemment durant cette période.

    • Il est possible de spécifier des abonnements qui n'expirent jamais (valeur @retention égale à 0), mais il est fortement déconseillé de le faire, car il est impossible de nettoyer les métadonnées.

  • La période de rétention pour tout serveur de republication doit être égale ou inférieure à la période de rétention définie sur le serveur de publication d'origine. Si vous utilisez des partenaires de synchronisation de remplacement, vous devriez utiliser les mêmes valeurs de rétention de publication pour les serveurs de publication et tous les partenaires de synchronisation de remplacement. L'utilisation de valeurs différentes pourrait produire une non-convergence. Pour modifier la valeur de rétention de publication, réinitialisez l'Abonné afin d'éviter la non-convergence des données.

  • Après un nettoyage, si la période de rétention de publication est augmentée et qu'un abonnement essaie de fusionner avec le serveur de publication (qui a déjà supprimé les métadonnées), l'abonnement n'expire pas en raison de l'augmentation de la valeur de rétention. Cependant, le serveur de publication ne dispose pas d'une quantité suffisante de métadonnées pour télécharger les modifications apportées à l'Abonné, ce qui génère une non-convergence.

Nettoyage des métadonnées

Le nettoyage des métadonnées dans une réplication de fusion est effectué par la procédure stockée sp_mergemetadataretentioncleanup (Transact-SQL) ; la durée de nettoyage est basée sur la période de rétention de publication. L'Agent de fusion appelle la procédure de fusion à chaque fois qu'il s'exécute pour un abonnement. La procédure supprime les métadonnées antérieures à la période de rétention de publication des tables système suivantes :

Ces tables sont utilisées par tous les publications dans une base de données de publication : s'il existe plus d'une publication, la période de rétention la plus longue est toujours utilisée pour déterminer quand les métadonnées peuvent être supprimées.