sp_mergecleanupmetadata (Transact-SQL)

S'applique à : SQL Server

Doit être utilisé uniquement dans les topologies de réplication qui incluent des serveurs exécutant des versions de SQL Server avant SQL Server 2000 (8.x) Service Pack 1. sp_mergecleanupmetadatapermet aux administrateurs de nettoyer les métadonnées dans les tables système et MSmerge_tombstone les MSmerge_genhistoryMSmerge_contentstables système. Cette procédure stockée est exécutée sur le serveur de publication dans la base de données de publication.

Conventions de la syntaxe Transact-SQL

Syntaxe

sp_mergecleanupmetadata
    [ [ @publication = ] N'publication' ]
    [ , [ @reinitialize_subscriber = ] N'reinitialize_subscriber' ]
[ ; ]

Arguments

[ @publication = ] N’publication'

Nom de la publication. @publication est sysname, avec une valeur par défaut %, qui nettoie les métadonnées pour toutes les publications. La publication doit déjà exister si elle est spécifiée de manière explicite.

[ @reinitialize_subscriber = ] N’reinitialize_subscriber'

Spécifie si réinitialiser l'abonné. @reinitialize_subscriber est nvarchar(5), avec la valeur par défaut true.

  • Si true, les abonnements sont marqués pour la réinitialisation.
  • Si false, les abonnements ne sont pas marqués pour la réinitialisation.

Valeurs des codes de retour

0 (réussite) or 1 (échec).

Notes

sp_mergecleanupmetadata doit être utilisé uniquement dans les topologies de réplication qui incluent des serveurs exécutant des versions de SQL Server avant SQL Server 2000 (8.x) Service Pack 1. Les topologies qui incluent uniquement SQL Server 2000 (8.x) Service Pack 1 ou version ultérieure doivent utiliser le nettoyage automatique des métadonnées basée sur la rétention. Lorsque vous exécutez cette procédure stockée, soyez conscient de l'importance de la croissance nécessaire et potentielle du fichier journal sur l'ordinateur sur lequel la procédure stockée est exécutée.

Une fois sp_mergecleanupmetadata exécuté, par défaut, tous les abonnements aux Abonnés des publications qui ont des métadonnées stockées MSmerge_genhistoryet MSmerge_contents MSmerge_tombstone sont marqués pour la réinitialisation, toutes les modifications en attente sur l’Abonné sont perdues et l’instantané actuel est marqué comme obsolète.

S’il existe plusieurs publications sur une base de données et qu’une de ces publications utilise une période de rétention infinie des publications (@retention est 0), l’exécution sp_mergecleanupmetadata ne nettoie pas les métadonnées de suivi des modifications de réplication de fusion pour la base de données. C'est pour cette raison qu'il faut utiliser la période de rétention infinie avec prudence.

Lors de l’exécution de cette procédure stockée, vous pouvez choisir de réinitialiser les Abonnés en définissant le paramètre true @reinitialize_subscriber sur (valeur par défaut) ou false. S’il sp_mergecleanupmetadata est exécuté avec le paramètre true@reinitialize_subscriber défini sur , un instantané est réappliqué sur l’Abonné même si l’abonnement a été créé sans instantané initial (par exemple, si les données et le schéma d’instantané ont été appliqués manuellement ou existaient déjà sur l’Abonné). La définition du paramètre à false utiliser avec précaution, car si la publication n’est pas réinitialisée, vous devez vous assurer que les données sur le serveur de publication et l’Abonné sont synchronisées.

Quelle que soit la valeur de @reinitialize_subscriber, sp_mergecleanupmetadata échoue s’il existe des processus de fusion en cours qui tentent de charger des modifications vers un serveur de publication ou un Abonné de republier au moment de l’appel de la procédure stockée.

Exécuter sp_mergecleanupmetadata avec @reinitialize_subscriber = N’true'

  1. Il est recommandé, mais pas obligatoire, d’arrêter toutes les mises à jour des bases de données de publication et d’abonnement. Si les mises à jour se poursuivent, toute mise à jour réalisée sur un abonné depuis la dernière fusion est perdue lorsque la publication est réinitialisée, mais les données de convergence sont conservées.

  2. Exécutez une fusion à l'aide de l'Agent de fusion. Nous vous recommandons d’utiliser l’option de ligne de commande -Validate agent sur chaque Abonné lorsque vous exécutez le Agent de fusion. Si vous exécutez des fusions en mode continu, consultez Considérations spéciales relatives aux fusions en mode continu plus loin dans cette section.

  3. Une fois toutes les fusions terminées, exécutez sp_mergecleanupmetadata.

  4. Exécutez sp_reinitmergepullsubscription sur tous les abonnés à l’aide d’un abonnement pull nommé ou anonyme pour garantir la convergence des données.

  5. Si vous exécutez des fusions en mode continu, consultez Considérations spéciales relatives aux fusions en mode continu plus loin dans cette section.

  6. Régénérez les fichiers d'instantané de toutes les publications de fusion impliquées à tous les niveaux. Si vous tentez d'effectuer la fusion sans régénérer l'instantané au préalable, vous recevez un message vous invitant à la régénérer.

  7. Sauvegardez la base de données de publication. car sans cela, une opération de fusion peut échouer après la restauration de la base de données de publication.

Exécuter sp_mergecleanupmetadata avec @reinitialize_subscriber = N’false'

  1. Arrêtez toutes les mises à jour des bases de données de publication et d’abonnement.

  2. Exécutez une fusion à l'aide de l'Agent de fusion. Nous vous recommandons d’utiliser l’option de ligne de commande de l’agent -Validate sur chaque Abonné lorsque vous exécutez le Agent de fusion. Si vous exécutez des fusions en mode continu, consultez considérations spéciales relatives aux fusions en mode continu plus loin dans cet article.

  3. Une fois toutes les fusions terminées, exécutez sp_mergecleanupmetadata.

  4. Si vous exécutez des fusions en mode continu, consultez Considérations spéciales relatives aux fusions en mode continu plus loin dans cette section.

  5. Régénérez les fichiers d'instantané de toutes les publications de fusion impliquées à tous les niveaux. Si vous tentez d'effectuer la fusion sans régénérer l'instantané au préalable, vous recevez un message vous invitant à la régénérer.

  6. Sauvegardez la base de données de publication. car sans cela, une opération de fusion peut échouer après la restauration de la base de données de publication.

Considérations spéciales relatives aux fusions en mode continu

Si vous exécutez des fusions en mode continu, vous devez :

  • Arrêtez le Agent de fusion, puis effectuez une autre fusion sans le -Continuous paramètre spécifié.

  • Désactivez la publication avec sp_changemergepublication pour vous assurer que les fusions en mode continu qui interrogent l’état de la publication échouent.

    EXEC central..sp_changemergepublication @publication = 'dynpart_pubn', @property = 'status', @value = 'inactive';
    

Lorsque vous avez terminé l’étape 3 de l’exécution sp_mergecleanupmetadata, reprenez les fusions en mode continu en fonction de la façon dont vous les avez arrêtées. Un des deux éléments suivants :

  • Ajoutez le paramètre -Continuous pour le Agent de fusion.

  • Réactivez la publication avec sp_changemergepublication.

    EXEC central..sp_changemergepublication @publication = 'dynpart_pubn', @property = 'status', @value = 'active'
    

autorisations

Seuls les membres du rôle serveur fixe sysadmin ou db_owner rôle de base de données fixe peuvent s’exécuter sp_mergecleanupmetadata.

Pour utiliser cette procédure stockée, le serveur de publication doit exécuter SQL Server 2000 (8.x). Les Abonnés doivent exécuter SQL Server 2000 (8.x) ou SQL Server 7.0, Service Pack 2.