Partage via


sp_addsubscription (Transact-SQL)

S’applique à : SQL Server Azure SQL Database

Ajoute un abonnement à une publication et définit l'état de l'abonné. 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_addsubscription
    [ @publication = ] N'publication'
    [ , [ @article = ] N'article' ]
    [ , [ @subscriber = ] N'subscriber' ]
    [ , [ @destination_db = ] N'destination_db' ]
    [ , [ @sync_type = ] N'sync_type' ]
    [ , [ @status = ] N'status' ]
    [ , [ @subscription_type = ] N'subscription_type' ]
    [ , [ @update_mode = ] N'update_mode' ]
    [ , [ @loopback_detection = ] N'loopback_detection' ]
    [ , [ @frequency_type = ] frequency_type ]
    [ , [ @frequency_interval = ] frequency_interval ]
    [ , [ @frequency_relative_interval = ] frequency_relative_interval ]
    [ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
    [ , [ @frequency_subday = ] frequency_subday ]
    [ , [ @frequency_subday_interval = ] frequency_subday_interval ]
    [ , [ @active_start_time_of_day = ] active_start_time_of_day ]
    [ , [ @active_end_time_of_day = ] active_end_time_of_day ]
    [ , [ @active_start_date = ] active_start_date ]
    [ , [ @active_end_date = ] active_end_date ]
    [ , [ @optional_command_line = ] N'optional_command_line' ]
    [ , [ @reserved = ] N'reserved' ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @offloadagent = ] offloadagent ]
    [ , [ @offloadserver = ] N'offloadserver' ]
    [ , [ @dts_package_name = ] N'dts_package_name' ]
    [ , [ @dts_package_password = ] N'dts_package_password' ]
    [ , [ @dts_package_location = ] N'dts_package_location' ]
    [ , [ @distribution_job_name = ] N'distribution_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @backupdevicetype = ] N'backupdevicetype' ]
    [ , [ @backupdevicename = ] N'backupdevicename' ]
    [ , [ @mediapassword = ] N'mediapassword' ]
    [ , [ @password = ] N'password' ]
    [ , [ @fileidhint = ] fileidhint ]
    [ , [ @unload = ] unload ]
    [ , [ @subscriptionlsn = ] subscriptionlsn ]
    [ , [ @subscriptionstreams = ] subscriptionstreams ]
    [ , [ @subscriber_type = ] subscriber_type ]
    [ , [ @memory_optimized = ] memory_optimized ]
[ ; ]

Arguments

[ @publication = ] N’publication'

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

[ @article = ] N’article'

Article auquel la publication est abonnée. @article est sysname, avec la valeur par défaut all. Si all, un abonnement est ajouté à tous les articles de cette composition. Seules les valeurs des serveurs de publication Oracle sont prises en charge ou NULL sont prises en charge pour les serveurs de all publication Oracle.

[ @subscriber = ] N’subscriber'

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

Remarque

Le nom du serveur peut être spécifié comme <Hostname>,<PortNumber> pour une instance par défaut ou <Hostname>\<InstanceName>,<PortNumber> pour une instance nommée. Spécifiez le numéro de port de votre connexion lorsque SQL Server est déployé sur Linux ou Windows avec un port personnalisé et que le service de navigateur est désactivé. L’utilisation de numéros de port personnalisés pour le serveur de distribution distant s’applique à SQL Server 2019 (15.x) et versions ultérieures.

[ @destination_db = ] N’destination_db'

Nom de la base de données de destination dans laquelle placer des données répliquées. @destination_db est sysname, avec la valeur par défaut NULL. Quand NULL, @destination_db est défini sur le nom de la base de données de publication. Pour les serveurs de publication Oracle, @destination_db doit être spécifié. Pour un abonné non-SQL Server, spécifiez une valeur de (destination par défaut) pour @destination_db.

[ @sync_type = ] N’sync_type'

Type de synchronisation d’abonnement. @sync_type est nvarchar(255) et peut être l’une des valeurs suivantes :

Valeur Description
none 1 L'abonnement dispose déjà du schéma et des données initiales destinées aux tables publiées.
automatic (valeur par défaut) Le schéma et les données initiales des tables publiées sont transférés en premier lieu vers l'Abonné.
replication support only 2 Fournit une génération automatique au niveau de l'Abonné des procédures stockées personnalisées de l'article et des déclencheurs qui prennent en charge les abonnements de mise à jour, le cas échéant. Considère que l'Abonné dispose déjà du schéma et des données initiales pour les tables publiées. Lors de la configuration d'une topologie de réplication transactionnelle d'égal à égal, veillez à ce que les données de tous les nœuds de la topologie soient identiques. Pour plus d’informations, consultez Peer-to-Peer - Réplication transactionnelle.
initialize with backup 2 Le schéma et les données initiales destinées aux tables publiées proviennent d'une sauvegarde de la base de données de publication. L'abonné est censé avoir accès à une sauvegarde de la base de données de publication. L’emplacement de la sauvegarde et du type de support pour la sauvegarde est spécifié par @backupdevicename et @backupdevicetype. Lors de l'utilisation de cette option, il n'est pas nécessaire de suspendre la topologie de réplication transactionnelle d'égal à égal pendant la configuration.
initialize from lsn Utilisé lorsque vous ajoutez un nœud à une topologie de réplication transactionnelle d’égal à égal. Utilisé avec la propriété @subscriptionlsn pour vérifier que toutes les transactions appropriées sont répliquées sur le nouveau nœud. Considère que l'Abonné dispose déjà du schéma et des données initiales pour les tables publiées. Pour plus d’informations, consultez Peer-to-Peer - Réplication transactionnelle.

1 Cette option a été déconseillée. Utilisez plutôt la prise en charge de la réplication uniquement.

2 Non pris en charge pour les abonnements aux publications non-SQL Server.

Remarque

Les données et les tables système sont toujours transférées.

[ @status = ] N’status'

État de l’abonnement. @status est sysname, avec la valeur par défaut NULL. Lorsque ce paramètre n’est pas défini explicitement, la réplication la définit automatiquement sur l’une de ces valeurs.

Valeur Description
active L'abonnement est initialisé et prêt à accepter des modifications. Cette option est définie lorsque la valeur de @sync_type n’est pas, initialise avec la sauvegarde ou la prise en charge de la réplication uniquement.
subscribed L'abonnement doit être initialisé. Cette option est définie lorsque la valeur de @sync_type est automatique.

[ @subscription_type = ] N’subscription_type'

Type d’abonnement. @subscription_type est nvarchar(4), avec la valeur par défaut push. Peut être push ou pull. Les Agent de distribution des abonnements push résident sur le serveur de distribution et les Agent de distribution des abonnements par extraction résident sur l’Abonné. @subscription_type pouvez pull créer un abonnement pull nommé connu du serveur de publication. Pour plus d’informations, consultez S’abonner à des publications.

Remarque

Les abonnements anonymes n’ont pas besoin d’utiliser cette procédure stockée.

[ @update_mode = ] N’update_mode'

Le type de mise à jour. @update_mode est nvarchar(30) et peut être l’une de ces valeurs.

Valeur Description
read only (valeur par défaut) L'abonnement est en lecture seule. Les modifications apportées à l’Abonné ne sont pas envoyées au serveur de publication.
sync tran Active la prise en charge des abonnements de mise à jour immédiate. Non pris en charge pour les serveurs de publication Oracle.
queued tran Active l'abonnement pour la mise à jour en attente. Les modifications de données peuvent être effectuées chez l'abonné, stockées dans une file d'attente, puis propagées vers le serveur de publication. Non pris en charge pour les serveurs de publication Oracle.
failover Active l'abonnement pour la mise à jour immédiate avec mise à jour en attente sous forme de basculement. Les modifications de données peuvent être effectuées chez l'abonné, puis propagées immédiatement vers le serveur de publication. Si le serveur de publication et l’Abonné ne sont pas connectés, le mode de mise à jour peut être modifié afin que les modifications de données apportées à l’Abonné soient stockées dans une file d’attente jusqu’à ce que l’Abonné et l’Éditeur soient reconnectés. Non pris en charge pour les serveurs de publication Oracle.
queued failover Active l'abonnement en tant qu'abonnement de mise à jour en attente, avec possibilité de passer au mode de mise à jour immédiate. Les modifications de données peuvent être effectuées chez l'abonné et stockées dans une file d'attente, jusqu'à ce qu'une connexion soit établie entre l'abonné et le serveur de publication. Lorsqu'une connexion permanente est établie, il est possible de passer au mode de mise à jour immédiate. Non pris en charge pour les serveurs de publication Oracle.

Les valeurs sync tran et queued tran ne sont pas autorisées si la publication en cours d’abonnement autorise DTS.

[ @loopback_detection = ] N’loopback_detection'

Indique si l'Agent de distribution envoie des transactions à un abonné qui en est l'auteur. @loopback_detection est nvarchar(5) et peut être l’une de ces valeurs.

Valeur Description
true Agent de distribution n’envoie pas de transactions provenant de l’Abonné à l’Abonné. Utilisé avec la réplication transactionnelle bidirectionnelle. Pour plus d’informations, voir Bidirectional Transactional Replication.
false L'Agent de distribution renvoie à l'abonné ses propres transactions.
NULL (valeur par défaut) Définissez automatiquement la valeur true pour un abonné SQL Server et false pour un abonné non-SQL Server.

[ @frequency_type = ] frequency_type

Fréquence à laquelle planifier la tâche de distribution. @frequency_type est int et peut être l’une de ces valeurs.

Valeur Description
1 Ponctuelle
2 À la demande
4 Quotidiennement
8 Hebdomadaire
16 Mensuelle
32 Mensuelle relative
64 (valeur par défaut) Démarrage automatique
128 Récurrent

[ @frequency_interval = ] frequency_interval

Valeur à appliquer à la fréquence définie par @frequency_type. @frequency_interval est int, avec la valeur par défaut NULL.

[ @frequency_relative_interval = ] frequency_relative_interval

Date du Agent de distribution. Ce paramètre est utilisé lorsque @frequency_type est défini 32 sur (relatif mensuel). @frequency_relative_interval est int et peut être l’une de ces valeurs.

Valeur Description
1 First
2 Second
4 Third
8 Quatrième
16 Dernière
NULL (valeur par défaut)

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

Facteur de périodicité utilisé par @frequency_type. @frequency_recurrence_factor est int, avec la valeur par défaut NULL.

[ @frequency_subday = ] frequency_subday

Fréquence, en minutes, de replanifier pendant la période définie. @frequency_subday est int et peut être l’une de ces valeurs.

Valeur Description
1 Une fois
2 Second
4 Minute
8 Heure
NULL

[ @frequency_subday_interval = ] frequency_subday_interval

Intervalle de @frequency_subday. @frequency_subday_interval est int, avec la valeur par défaut NULL.

[ @active_start_time_of_day = ] active_start_time_of_day

Heure du jour où la Agent de distribution est planifiée pour la première fois, mise en forme comme HHmmss. @active_start_time_of_day est int, avec la valeur par défaut NULL.

[ @active_end_time_of_day = ] active_end_time_of_day

Heure du jour où le Agent de distribution cesse d’être planifié, mis en forme comme HHmmss. @active_end_time_of_day est int, avec la valeur par défaut NULL.

[ @active_start_date = ] active_start_date

Date à laquelle le Agent de distribution est planifié pour la première fois, mis en forme en tant que yyyyMMdd. @active_start_date est int, avec une valeur par défaut de NULL.

[ @active_end_date = ] active_end_date

Date à laquelle la Agent de distribution cesse d’être planifiée, mise en forme comme yyyyMMddsuit : @active_end_date est int, avec une valeur par défaut de NULL.

[ @optional_command_line = ] N’optional_command_line'

Invite de commandes facultative à exécuter. @optional_command_line est nvarchar(4000), avec la valeur par défaut NULL.

[ @reserved = ] N’reserved'

Identifié à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.

[ @enabled_for_syncmgr = ] N’enabled_for_syncmgr'

Indique si l’abonnement peut être synchronisé via le Gestionnaire de synchronisation Windows. @enabled_for_syncmgr est nvarchar(5), avec une valeur par défaut NULL, qui est identique à false. Si false, l’abonnement n’est pas inscrit auprès du Gestionnaire de synchronisation Windows. Si true, l’abonnement est inscrit auprès du Gestionnaire de synchronisation Windows et peut être synchronisé sans démarrer SQL Server Management Studio. Non pris en charge pour les serveurs de publication Oracle.

[ @offloadagent = ] déchargement

Indique si l'Agent peut être activé à distance. @offloadagent est bit, avec la valeur par défaut 0.

Remarque

Ce paramètre est déconseillé et n'est conservé que pour la compatibilité descendante des scripts.

[ @offloadserver = ] N’offloadserver'

Indique le nom réseau du serveur à utiliser pour l'activation à distance. @offloadserver est sysname, avec la valeur par défaut NULL.

[ @dts_package_name = ] N’dts_package_name'

Spécifie le nom du package DTS (Data Transformation Services). @dts_package_name est sysname, avec la valeur par défaut NULL. Par exemple, pour spécifier un package nommé DTSPub_Package, le paramètre est le suivant : @dts_package_name = N'DTSPub_Package'. Ce paramètre est disponible avec les abonnements envoyés. Pour ajouter des informations de package DTS à un abonnement par extraction, utilisez sp_addpullsubscription_agent.

[ @dts_package_password = ] N’dts_package_password'

Spécifie le mot de passe sur le package, s’il en existe un. @dts_package_password est sysname, avec la valeur par défaut NULL.

Remarque

Vous devez spécifier un mot de passe si @dts_package_name est spécifié.

[ @dts_package_location = ] N’dts_package_location'

Spécifie l'emplacement du package. @dts_package_location est nvarchar(12), avec une valeur par défaut NULL, qui est identique à distributor. L’emplacement du package peut être distributor ou subscriber.

[ @distribution_job_name = ] N’distribution_job_name'

Identifié à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.

[ @publisher = ] N’publisher'

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

Remarque

@publisher ne doit pas être spécifié pour un serveur de publication SQL Server.

[ @backupdevicetype = ] N’backupdevicetype'

Indique le type d'unité de sauvegarde utilisé lors de l'initialisation d'un Abonné à partir d'une sauvegarde. @backupdevicetype est nvarchar(20) et peut être l’une des valeurs suivantes :

Valeur Description
logical (valeur par défaut) L’appareil de sauvegarde est un appareil logique
disk L’appareil de sauvegarde est un lecteur de disque
tape L'unité de sauvegarde est un lecteur de bande.
url L’appareil de sauvegarde est une URL

@backupdevicetype est utilisé uniquement lorsque @sync_method est défini sur initialize_with_backup.

[ @backupdevicename = ] N’backupdevicename'

Indique le nom de l'unité utilisée lors de l'initialisation d'un Abonné à partir d'une sauvegarde. @backupdevicename est nvarchar(1000), avec la valeur par défaut NULL.

[ @mediapassword = ] N’mediapassword'

Indique un mot de passe pour le support spécifié, si un mot de passe a été défini lors du formatage du support. @mediapassword est sysname, avec la valeur par défaut NULL.

Remarque

Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

[ @password = ] N’password'

Indique un mot de passe pour la sauvegarde, si un mot de passe a été défini lors de la création de celle-ci. @password est sysname, avec la valeur par défaut NULL.

[ @fileidhint = ] fileidhint

Identifie une valeur ordinale du jeu de sauvegarde à restaurer. @fileidhint est int, avec la valeur par défaut NULL.

[ @unload = ] décharger

Indique si une unité de sauvegarde sur bande doit être déchargée une fois l'initialisation de la sauvegarde terminée. @unload est bit, avec une valeur par défaut 1, qui spécifie que la bande doit être déchargée. @unload est utilisé uniquement lorsque @backupdevicetype est tape.

[ @subscriptionlsn = ] subscriptionlsn

Spécifie le numéro séquentiel dans le journal auquel un abonnement doit commencer à remettre des modifications à un nœud dans une topologie de réplication transactionnelle d'égal à égal. @subscriptionlsn est binary(10), avec la valeur par défaut NULL. Utilisé avec une valeur @sync_type de initialize from lsn vérifier que toutes les transactions pertinentes sont répliquées vers un nouveau nœud. Pour plus d’informations, consultez Peer-to-Peer - Réplication transactionnelle.

[ @subscriptionstreams = ] subscriptionstreams

Nombre de connexions autorisées par Agent de distribution pour appliquer des lots de modifications en parallèle à un Abonné, tout en conservant la plupart des caractéristiques transactionnelles présentes lors de l’utilisation d’un thread unique. @subscriptionstreams est tinyint, avec une valeur par défaut de NULL. Une plage de valeurs est 1 64 prise en charge. Ce paramètre n’est pas pris en charge pour les abonnés non-SQL Server, les serveurs de publication Oracle ou les abonnements d’égal à égal. Chaque fois que @subscriptionstreams est utilisé, des lignes supplémentaires sont ajoutées dans la msreplication_subscriptions table (une ligne par flux) avec une agent_id valeur définie NULLsur .

Remarque

Les flux d’abonnement ne fonctionnent pas pour les articles configurés pour fournir Transact-SQL. Pour utiliser des flux d’abonnement, configurez des articles pour remettre des appels de procédure stockée à la place.

[ @subscriber_type = ] subscriber_type

Type d’Abonné. @subscriber_type est minuscule et peut être l’une de ces valeurs.

Valeur Description
0 (valeur par défaut) Abonné SQL Server
1 Serveur de la source de données ODBC.
2 Base de données Microsoft Jet
3 Fournisseur OLE DB

[ @memory_optimized = ] memory_optimized

Indique que l’abonnement prend en charge les tables mémoire optimisées. @memory_optimized est bit, avec la valeur par défaut (0false). 1 (true) signifie que l’abonnement prend en charge les tables mémoire optimisées.

Valeurs des codes de retour

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

Notes

sp_addsubscription est utilisé dans la réplication d’instantanés et la réplication transactionnelle.

Lorsqu’il sp_addsubscription est exécuté par un membre du rôle serveur fixe sysadmin pour créer un abonnement Push, le travail Agent de distribution est implicitement créé et s’exécute sous le compte de service SQL Server Agent. Nous vous recommandons d’exécuter sp_addpushsubscription_agent et de spécifier les informations d’identification d’un autre compte Windows spécifique à l’agent pour @job_login et @job_password. Pour plus d’informations, voir Replication Agent Security Model.

sp_addsubscription empêche les abonnés ODBC et OLE DB d’accéder aux publications qui :

  • Ont été créés avec le @sync_method natif dans l’appel à sp_addpublication.

  • Contiennent des articles ajoutés à la publication avec la procédure stockée sp_addarticle dont la valeur de paramètre @pre_creation_cmd est 3 (tronquer).

  • Essayez de définir @update_mode sur sync tran.

  • ont un article configuré pour utiliser des instructions paramétrables.

En outre, si une publication a l’option @allow_queued_tran définie sur true (ce qui active la mise en file d’attente des modifications sur l’Abonné jusqu’à ce qu’elle puisse être appliquée au serveur de publication), la colonne timestamp d’un article est scriptée comme horodatage et les modifications apportées à cette colonne sont envoyées à l’Abonné. L'abonné génère et met à jour la valeur de la colonne timestamp. Pour un abonné ODBC ou OLE DB, sp_addsubscription échoue si une tentative est effectuée pour s’abonner à une publication qui a @allow_queued_tran définie sur true et des articles avec des colonnes d’horodatage dans celui-ci.

Si un abonnement n’utilise pas de package DTS, il ne peut pas s’abonner à une publication définie sur @allow_transformable_subscriptions. Si la table issue de la publication doit être répliquée vers un abonnement DTS et un abonnement non-DTS, deux publications indépendantes doivent être créées : une pour chaque type d'abonnement.

Lors de la sélection des options replication support onlysync_type , initialize with backupou initialize from lsn, l’agent de lecture du journal doit s’exécuter après l’exécution sp_addsubscription, afin que les scripts de configuration soient écrits dans la base de données de distribution. L'Agent de lecture du journal doit s'exécuter sous un compte membre du rôle serveur fixe sysadmin . Lorsque l’option @sync_type est définie Automaticsur , aucune action spéciale de l’agent de lecture du journal n’est requise.

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_addsubscription. Pour les abonnements par extraction, les utilisateurs disposant de connexions dans la liste d’accès aux publications peuvent s’exécuter sp_addsubscription.

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 @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2022Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2022]
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO