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

Lors de la configuration d'un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour tous les paramètres, y compris job_login et job_password, sont envoyées en texte brut au serveur de distribution. 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 Activer des connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).

Important

Dans certaines conditions, cette procédure stockée peut échouer si l’Abonné exécute Microsoft SQL Server 2005 (9.x) Service Pack 1 ou version ultérieure et que le serveur de publication exécute une version antérieure. Si la procédure stockée échoue dans ce scénario, mettez à niveau le serveur de publication vers SQL Server 2005 (9.x) Service Pack 1 ou version ultérieure.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

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

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

[ @publication = ] 'publication' Nom de la publication vers laquelle établir un lien. 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 en vue d’une 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 comme connexion et mot de passe.

Remarque : Dans les versions précédentes de SQL Server, cette option était utilisée pour spécifier un appel de procédure distante dynamique (RPC).
1 Utilise le contexte de sécurité (SQL Server l’authentification ou l’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é définie par l’utilisateur existante créée à l’aide de sp_link_publication.

[ @login = ] 'login' Connexion. login est de type sysname, avec NULL comme valeur par défaut. Ce paramètre doit être spécifié lorsque security_mode a la valeur 0.

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

[ @distributor = ] 'distributor' Nom du serveur de distribution. le serveur de distribution est sysname, avec la valeur par défaut NULL.

Codet de retour

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

Remarques

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 (Transact-SQL).

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

Le mode par défaut utilisé par un Abonné de mise à jour immédiate lors de sa connexion au serveur de publication n'autorise pas l'utilisation 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é. Pour cela, le sp_link_publication doit être exécuté avec security_mode = 2. Lorsque vous utilisez l'authentification Windows, la délégation de compte de sécurité doit être prise en charge.

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

-- 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 exécuter sp_link_publication.

Voir aussi

sp_droppullsubscription (Transact-SQL)
sp_helpsubscription_properties (Transact-SQL)
sp_subscription_cleanup (Transact-SQL)
Procédures stockées système (Transact-SQL)