sp_reinitsubscription (Transact-SQL)

Marque l'abonnement pour la réinitialisation. Cette procédure stockée est exécutée sur le serveur de publication pour les abonnements par envoi de données (push).

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

Syntaxe

sp_reinitsubscription [ [ @publication = ] 'publication' ]
    [ , [ @article = ] 'article' ]
        , [ @subscriber = ] 'subscriber'
    [ , [ @destination_db = ] 'destination_db']
    [ , [ @for_schema_change = ] 'for_schema_change']
    [ , [ @publisher = ] 'publisher' ]
    [ , [ @ignore_distributor_failure = ] ignore_distributor_failure ] 
    [ , [ @invalidate_snapshot = ] invalidate_snapshot ]

Arguments

  • [ @publication=] 'publication'
    Nom de la publication. publication est de type sysname, avec la valeur par défaut all.

  • [ @article=] 'article'
    Nom de l'article. article est de type sysname, avec la valeur par défaut all. Pour une publication avec mise à jour immédiate, article doit avoir la valeur all ; dans le cas contraire, la procédure stockée ignore la publication et signale une erreur.

  • [ @subscriber=] 'subscriber'
    Nom de l'Abonné. abonné est de type sysname sans valeur par défaut.

  • [ @destination_db=] 'destination_db'
    Nom de la base de données de destination. destination_db est de type sysname avec la valeur par défaut all.

  • [ @for_schema_change=] 'for_schema_change'
    Indique si la réinitialisation se produit à la suite de la modification d'un schéma dans la base de données de publication. for_schema_change est de type bit, avec la valeur par défaut 0. Avec la valeur 0, les abonnements actifs des publications qui permettent la mise à jour immédiate sont réactivés si toute la publication, et pas seulement certains de ses articles, est réinitialisée. Ceci implique que la réinitialisation est effectuée à la suite de modifications du schéma. Si la valeur est 1, les abonnements actifs ne sont pas réactivés tant que l'Agent de capture instantanée n'est pas exécuté.

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

    [!REMARQUE]

    publisher ne doit pas être utilisé avec les serveurs de publication SQL Server.

  • [ @ignore_distributor_failure= ] ignore_distributor_failure
    Autorise la réinitialisation même si le serveur de distribution n'existe pas ou est hors connexion. ignore_distributor_failure est de type bit, avec 0 comme valeur par défaut. Si la valeur est égale à 0, la réinitialisation échoue si le serveur de distribution n'existe pas ou est hors connexion.

  • [ @invalidate_snapshot= ] invalidate_snapshot
    Invalide la capture instantanée existante de la publication. invalidate_snapshot est de type bit, avec 0 comme valeur par défaut. Si la valeur est égale à 1, une nouvelle capture instantanée est générée pour la publication.

Valeurs des codes de retour

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

Notes

sp_reinitsubscription est utilisé dans la réplication transactionnelle.

sp_reinitsubscription n'est pas pris en charge pour la réplication transactionnelle d'égal à égal.

Lorsque les abonnements dans lesquels la capture instantanée initiale est appliquée automatiquement et que la publication n'autorise pas les abonnements pouvant être mis à jour, l'Agent de capture instantanée doit être exécuté après l'exécution de cette procédure stockée pour que les fichiers du schéma et du programme de copie en bloc soient préparés et que les Agents de distribution puissent ensuite resynchroniser les abonnements.

Lorsque la capture instantanée initiale est appliquée automatiquement et que la publication autorise les abonnements pouvant être mis à jour, l'Agent de distribution resynchronise l'abonnement à partir des fichiers de schéma et de programme de copie en bloc les plus récents préalablement créés par l'Agent de capture instantanée. L'Agent de distribution resynchronise l'abonnement immédiatement après que l'utilisateur ait exécuté sp_reinitsubscription, si l'Agent de distribution n'est pas occupé. Sinon, la synchronisation peut avoir lieu après l'intervalle de message (spécifié par le paramètre d'invite de commandes de l'Agent de distribution : MessageInterval).

sp_reinitsubscription n'a aucun effet sur les abonnements où la capture instantanée est appliquée manuellement.

Pour resynchroniser des abonnements anonymes à une publication, indiquez all ou NULL pour subscriber.

La réplication transactionnelle prend en charge la réinitialisation d'abonnements au niveau de l'article. La capture instantanée de l'article est réappliquée sur l'Abonné au cours de la synchronisation suivante après que l'article a été marqué pour la réinitialisation. Toutefois, si le même Abonné a également souscrit à des articles dépendants, la réapplication de la capture instantanée sur l'article peut échouer sauf si les articles dépendants de la publication sont également automatiquement réinitialisés sous certaines conditions :

  • Si la commande de pré-création de l'article est 'drop', les articles des vues liées au schéma et les procédures stockées liées au schéma sur l'objet de base de cet article sont également marqués pour la réinitialisation.

  • Si l'option de schéma sur l'article inclut le script d'intégrité référentielle déclarée sur les clés primaires, les articles qui ont des tables de base avec des relations de clés étrangères à des tables de base de l'article réinitialisé sont également marqués pour la réinitialisation.

Exemple

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @subscriptionDB AS sysname;
DECLARE @publication AS sysname;
SET @subscriptionDB = N'AdventureWorksReplica';
SET @publication = N'AdvWorksProductTran';

USE [AdventureWorksReplica]

-- Execute at the Publisher to reinitialize the push subscription.
EXEC sp_reinitsubscription 
    @subscriber = $(SubServer),
    @destination_db = @subscriptionDB,
    @publication = @publication;
GO

-- Start the Distribution Agent.

Autorisations

Seuls les membres du rôle serveur fixe sysadmin, du rôle de base de données db_owner ou le créateur de l'abonnement peuvent exécuter sp_reinitsubscription.