sp_addpullsubscription (Transact-SQL)

S’applique à :SQL ServerAzure SQL Managed Instance

Ajoute un abonnement par extraction de données à une publication transactionnelle ou d'instantané. Cette procédure stockée est exécutée sur la base de données de l'Abonné dans laquelle l'abonnement extrait doit être créé.

Conventions de la syntaxe Transact-SQL

Syntaxe

sp_addpullsubscription
    [ @publisher = ] N'publisher'
    [ , [ @publisher_db = ] N'publisher_db' ]
    , [ @publication = ] N'publication'
    [ , [ @independent_agent = ] N'independent_agent' ]
    [ , [ @subscription_type = ] N'subscription_type' ]
    [ , [ @description = ] N'description' ]
    [ , [ @update_mode = ] N'update_mode' ]
    [ , [ @immediate_sync = ] immediate_sync ]
[ ; ]

Arguments

[ @publisher = ] N’publisher'

Nom du serveur de publication. @publisher est sysname, sans valeur par défaut.

Remarque

Le nom du serveur peut être spécifié en tant que <Hostname>,<PortNumber>. 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.

[ @publisher_db = ] N’publisher_db'

Nom de la base de données du serveur de publication. @publisher_db est sysname, avec la valeur par défaut NULL. @publisher_db est ignoré par les serveurs de publication Oracle.

[ @publication = ] N’publication'

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

[ @independent_agent = ] N’independent_agent'

Spécifie s’il existe une Agent de distribution autonome pour cette publication. @independent_agent est nvarchar(5), avec la valeur par défaut true.

  • S’il trueexiste un Agent de distribution autonome pour cette publication.
  • S’il falseexiste une Agent de distribution pour chaque paire de base de données/abonné de serveur de publication.

@independent_agent est une propriété de la composition et doit avoir la même valeur que le serveur de publication.

[ @subscription_type = ] N’subscription_type'

Type d’abonnement. @subscription_type est nvarchar(9), avec la valeur par défaut anonymous. Vous devez spécifier une valeur de pull@subscription_type, sauf si vous souhaitez créer un abonnement sans inscrire l’abonnement sur le serveur de publication. Dans ce cas, vous devez spécifier une valeur de anonymous. Cela est nécessaire pour les cas dans lesquels vous ne pouvez pas établir une connexion SQL Server au serveur de publication pendant la configuration de l’abonnement.

[ @description = ] N’description'

Description de la publication. @description est nvarchar(100), avec la valeur par défaut NULL.

[ @update_mode = ] N’update_mode'

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

Valeur Description
read only (valeur par défaut) L'abonnement est en lecture seule. Les modifications apportées à l’Abonné ne sont pas renvoyées au serveur de publication. Doit être utilisé lorsque les mises à jour ne sont pas effectuées sur l’Abonné.
synctran Active la prise en charge des abonnements de mise à jour immédiate.
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.
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, les modifications de données apportées à l’Abonné peuvent être stockées dans une file d’attente jusqu’à ce que l’Abonné et le Serveur de publication soient reconnectés.
queued failover Remarque : Non pris en charge pour les serveurs de publication Oracle.

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.

[ @immediate_sync = ] immediate_sync

Spécifie si les fichiers de synchronisation sont créés ou recréé chaque fois que l’Agent d’instantané s’exécute. @immediate_sync est bit, avec une valeur par défaut 1et doit être définie sur la même valeur que @immediate_sync dans sp_addpublication (Transact-SQL). @immediate_sync est une propriété de la publication et doit avoir la même valeur que le serveur de publication.

Valeurs des codes de retour

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

Notes

sp_addpullsubscriptionest utilisé dans instantané réplication et la réplication transactionnelle.

Important

Pour les abonnements mis à jour en file d’attente, utilisez l’authentification SQL Server pour les connexions aux Abonnés et spécifiez un compte différent pour la connexion à chaque Abonné. Lors de la création d’un abonnement par extraction prenant en charge la mise à jour en file d’attente, la réplication définit toujours la connexion pour utiliser l’authentification Windows (pour les abonnements par extraction, la réplication ne peut pas accéder aux métadonnées sur l’Abonné requis pour utiliser l’authentification SQL Server). Dans ce cas, vous devez exécuter sp_changesubscription pour modifier la connexion pour utiliser l’authentification SQL Server une fois l’abonnement configuré.

Si la table MSreplication_subscriptions (Transact-SQL) n’existe pas sur l’Abonné, sp_addpullsubscription la crée. Il ajoute également une ligne à la table MSreplication_subscriptions (Transact-SQL). Pour les abonnements par extraction, sp_addsubscription (Transact-SQL) doit d’abord être appelé au serveur de publication.

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

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2022';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorks2022Replica]
EXEC sp_addpullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

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