Partager via


sp_marksubscriptionvalidation (Transact-SQL)

Marque la transaction actuellement ouverte comme transaction de validation de niveau abonnement pour l'abonné spécifié. Cette procédure stockée est exécutée au niveau du serveur de publication dans la base de données de publication.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

sp_marksubscriptionvalidation [ @publication = ] 'publication'
        , [ @subscriber = ] 'subscriber'
        , [ @destination_db = ] 'destination_db'
    [ , [ @publisher = ] 'publisher' ]

Arguments

  • [ @publication = ] 'publication'
    Nom de la publication. L'argument publication est de type sysname et n'a pas de valeur par défaut.

  • [ @subscriber = ] 'subscriber'
    Nom de l'Abonné. L'argument subscriber est de type sysname et n'a pas de valeur par défaut.

  • [ @destination_db= ] 'destination_db'
    Nom de la base de données de destination. L'argument destination_db est de type sysname et n'a pas de valeur par défaut.

  • [ @publisher= ] 'publisher'
    Spécifie un serveur de publication non-MicrosoftSQL Server. publisher est de type sysname. Sa valeur par défaut est NULL.

    [!REMARQUE]

    Il est déconseillé d'utiliser publisher pour une publication appartenant à un serveur de publication SQL Server.

Valeurs des codes renvoyés

0 (succès) ou 1 (échec)

Notes

sp_marksubscriptionvalidation est utilisée dans la réplication transactionnelle.

sp_marksubscriptionvalidation ne prend pas en charge les Abonnés non-SQL Server.

Pour les Abonnés non-SQL Server, vous ne pouvez pas exécuter sp_marksubscriptionvalidation à partir d'une transaction explicite. Cela est dû au fait que les transactions explicites ne sont pas prises en charge sur la connexion du serveur lié utilisée pour accéder au serveur de publication.

sp_marksubscriptionvalidation doit être utilisé avec sp_article_validation (Transact-SQL), en spécifiant une valeur de 1 pour subscription_level. Elle peut être utilisée avec d'autres appels à sp_marksubscriptionvalidation pour marquer la transaction actuelle ouverte pour d'autres abonnés.

Autorisations

Seuls les membres du rôle serveur fixe sysadmin ou du rôle de base de données fixe db_owner peuvent exécuter la procédure sp_marksubscriptionvalidation.

Exemple

La requête suivante peut être appliquée à la base de données de publication pour publier des commandes de validation au niveau des abonnements. Ces commandes sont récupérées par les Agents de distribution des Abonnés spécifiés. Remarquez que la première transaction valide l'article 'art1' tandis que la seconde transaction valide 'art2'. Il est également intéressant de remarquer que les appels vers sp_marksubscriptionvalidation et sp_article_validation (Transact-SQL) ont été encapsulés dans une transaction. Un seul appel par transaction vers sp_article_validation (Transact-SQL) est recommandé dans la mesure où sp_article_validation (Transact-SQL) maintient en place, le temps de la transaction, un verrou de table partagé sur la table source. Les transactions courtes sont à privilégier pour maximiser l'accès simultané.

begin tran

exec sp_marksubscriptionvalidation @publication = 'pub1',
 @subscriber = 'Sub', @destination_db = 'SubDB'

exec sp_marksubscriptionvalidation @publication = 'pub1',
 @subscriber = 'Sub2', @destination_db = 'SubDB'

exec sp_article_validation @publication = 'pub1', @article = 'art1',
 @rowcount_only = 0, @full_or_fast = 0, @shutdown_agent = 0,
 @subscription_level = 1

commit tran

begin tran

exec sp_marksubscriptionvalidation @publication = 'pub1',
 @subscriber = 'Sub', @destination_db = 'SubDB'

exec sp_marksubscriptionvalidation @publication = 'pub1',
 @subscriber = 'Sub2', @destination_db = 'SubDB'

exec sp_article_validation @publication = 'pub1', @article = 'art2',
 @rowcount_only = 0, @full_or_fast = 0, @shutdown_agent = 0,
 @subscription_level = 1

commit tran