sp_reinitsubscription (Transact-SQL)

S’applique à : SQL Server Azure SQL Managed Instance

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).

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

[ @publication = ] N’publication'

Nom de la publication. @publication est sysname, avec la valeur par défaut all.

[ @article = ] N’article'

Nom de l’article. @article est sysname, avec la valeur par défaut all. Pour une publication à mise à jour immédiate, @article doit être all. Sinon, la procédure stockée ignore la publication et signale une erreur.

[ @subscriber = ] N’subscriber'

Nom de l'Abonné. @subscriber est sysname, sans valeur par défaut.

[ @destination_db = ] N’destination_db'

Nom de la base de données de destination @destination_db est 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 bit, avec la valeur par défaut 0.

  • Si 0, les abonnements actifs pour les publications qui autorisent la mise à jour immédiate sont réactivés tant que l’ensemble de la publication, et pas seulement certains de ses articles, sont réinitialisés. Ceci implique que la réinitialisation est effectuée à la suite de modifications du schéma.

  • Si 1les abonnements actifs ne sont pas réactivés tant que l’Agent d’instantané n’est pas exécuté.

[ @publisher = ] N’publisher'

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

@publisher ne doit pas être utilisé pour 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 bit, avec la valeur par défaut 0. Si 0, la réinitialisation échoue si le serveur de distribution n’existe pas ou est hors connexion.

[ @invalidate_snapshot = ] invalidate_snapshot

Invalide l'instantané existant de la publication. @invalidate_snapshot est bit, avec la valeur par défaut 0. Si 1, un nouvel instantané est généré pour la publication.

Valeurs des codes de retour

0 (réussite) or 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.

Pour les abonnements où l’instantané initial est appliqué automatiquement et où la publication n’autorise pas les abonnements pouvant être mis à jour, l’Agent d’instantané doit être exécuté une fois cette procédure stockée exécutée afin que le schéma et les fichiers de programme de copie en bloc soient préparés et que les Agent de distribution s puissent ensuite resynchroniser les abonnements.

Pour les abonnements où l’instantané initial est appliqué automatiquement et que la publication autorise les abonnements pouvant être mis à jour, le Agent de distribution resynchronise l’abonnement à l’aide du schéma le plus récent et copie en bloc les fichiers de programme créés précédemment par l’Agent d’instantané. La Agent de distribution resynchronise l’abonnement immédiatement après l’exécution sp_reinitsubscriptionde l’utilisateur, si le Agent de distribution n’est pas occupé. Sinon, la synchronisation peut se produire après l’intervalle de message (spécifié par Agent de distribution paramètre MessageIntervald’invite de commandes).

sp_reinitsubscription n’a aucun effet sur les abonnements où l’instantané initial est appliqué manuellement.

Pour resynchroniser les abonnements anonymes à une publication, transmettez all ou NULL @subscriber.

La réplication transactionnelle prend en charge la réinitialisation d'abonnements au niveau de l'article. L'instantané de l'article est réappliqué 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 l'instantané 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 pour les 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 de 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é étrangère aux tables de base de l’article réinitialisé, sont également marqués pour la réinitialisation.

Exemples

-- 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'AdventureWorks2022Replica';
SET @publication = N'AdvWorksProductTran';

USE [AdventureWorks2022Replica]

-- 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 , les membres du rôle de base de données fixe db_owner ou le créateur de l’abonnement peuvent s’exécuter sp_reinitsubscription.