Partager via


sp_link_publication (Transact-SQL)

S’applique à : SQL Server

Définit les informations de configuration et de sécurité utilisées par les déclencheurs de synchronisation des abonnements avec mise à jour immédiate lors de la connexion au serveur de publication. Cette procédure stockée est exécutée sur la base de données d'abonnement de l'Abonné.

Important

Lorsque vous configurez un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour tous les paramètres, notamment @job_login et @job_password, sont envoyées au serveur de distribution sous forme de texte brut. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d'exécuter cette procédure stockée. Pour plus d’informations, consultez Configurer le moteur de base de données SQL Server pour le chiffrement des connexions.

Conventions de la syntaxe Transact-SQL

Syntaxe

sp_link_publication
    [ @publisher = ] N'publisher'
    , [ @publisher_db = ] N'publisher_db'
    , [ @publication = ] N'publication'
    , [ @security_mode = ] security_mode
    [ , [ @login = ] N'login' ]
    [ , [ @password = ] N'password' ]
    [ , [ @distributor = ] N'distributor' ]
[ ; ]

Arguments

[ @publisher = ] N’publisher'

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

[ @publisher_db = ] N’publisher_db'

Nom de la base de données du serveur de publication à lier. @publisher_db est sysname, sans valeur par défaut.

[ @publication = ] N’publication'

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

[ @security_mode = ] security_mode

Mode de sécurité utilisé par l’Abonné pour se connecter à un serveur de publication distant pour la mise à jour immédiate. @security_mode est int et peut être l’une de ces valeurs. Lorsque c'est possible, utilisez l'authentification Windows.

Valeur Description
0 Utilise l’authentification SQL Server avec la connexion spécifiée dans cette procédure stockée en tant que @login et @password.

Remarque : Dans les versions précédentes de SQL Server, cette option a été utilisée pour spécifier un appel de procédure distante dynamique (RPC).
1 Utilise le contexte de sécurité (Authentification SQL Server ou Authentification Windows) de l’utilisateur qui effectue la modification sur l’Abonné.

Remarque : ce compte doit également exister sur le serveur de publication avec des privilèges suffisants. Lorsque vous utilisez l’authentification Windows, la délégation de compte de sécurité doit être prise en charge.
2 Utilise une connexion de serveur lié existante définie par l’utilisateur créée à l’aide sp_link_publicationde .

[ @login = ] N’login'

Connexion. @login est sysname, avec la valeur par défaut NULL. Ce paramètre doit être spécifié lorsque @security_mode est 0.

[ @password = ] N’password'

Mot de passe. @password est sysname, avec la valeur par défaut NULL. Ce paramètre doit être spécifié lorsque @security_mode est 0.

[ @distributor = ] N’distributor'

Nom du serveur de distribution. @distributor est sysname, avec une valeur par défaut d’une chaîne vide.

Valeurs des codes de retour

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

Notes

sp_link_publication est utilisé par la mise à jour immédiate des abonnements dans la réplication transactionnelle.

sp_link_publication peut être utilisé pour les abonnements Push et Pull. Cette procédure peut être appelée avant ou après la création de l’abonnement. Une entrée est insérée ou mise à jour dans la table système MSsubscription_properties .

Pour les abonnements Push, l’entrée peut être nettoyée par sp_subscription_cleanup. Pour les abonnements par extraction, l’entrée peut être nettoyée par sp_droppullsubscription ou sp_subscription_cleanup. Vous pouvez également appeler sp_link_publication avec un NULL mot de passe pour effacer l’entrée dans la table système MSsubscription_properties pour les problèmes de sécurité.

Le mode par défaut utilisé par un Abonné à la mise à jour immédiate lorsqu’il se connecte au serveur de publication n’autorise pas une connexion à l’aide de l’authentification Windows. La connexion avec un mode d'authentification Windows suppose qu'un serveur lié a été configuré au niveau du serveur de publication, et l'Abonné de mise à jour immédiate doit utiliser cette connexion lors de la mise à jour de l'Abonné. Cela nécessite l’exécution sp_link_publication avec @security_mode défini sur 2. Lorsque vous utilisez l’authentification Windows, la délégation de compte de sécurité doit être prise en charge.

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 @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks2022';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription to a transactional 
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB, 
    @update_mode = N'failover', 
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription, 
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication,
    @job_login = @login,
    @job_password = @password; 
 
-- Add a Windows Authentication-based linked server that enables the 
-- Subscriber-side triggers to make updates at the Publisher. 
EXEC sp_link_publication 
    @publisher = @publisher, 
    @publication = @publication,
    @publisher_db = @publicationDB, 
    @security_mode = 0,
    @login = @login,
    @password = @password;
GO

USE AdventureWorks2022;
GO

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @subscriptionDB = N'AdventureWorks2022Replica'; 
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2022]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO

autorisations

Seuls les membres du rôle serveur fixe sysadmin peuvent s’exécuter.sp_link_publication