sp_link_publication (Transact-SQL)

Si applica a:SQL Server

Imposta le informazioni di configurazione e sicurezza utilizzate dai trigger di sincronizzazione dei server di sottoscrizione ad aggiornamento immediato durante la connessione al server di pubblicazione. Questa stored procedure viene eseguita nel database di sottoscrizione del Sottoscrittore.

Importante

Quando si configura un server di pubblicazione con un server di distribuzione remoto, i valori specificati per tutti i parametri, inclusi job_login e job_password, vengono inviati al server di distribuzione come testo normale. È consigliabile crittografare la connessione tra il server di pubblicazione e il server di distribuzione remoto prima di eseguire questa stored procedure. Per altre informazioni, vedere Abilitare le connessioni crittografate al motore di database (Gestione configurazione SQL Server).

Importante

In determinate condizioni, questa stored procedure può avere esito negativo se il Sottoscrittore esegue Microsoft SQL Server 2005 (9.x) Service Pack 1 o versione successiva e il server di pubblicazione esegue una versione precedente. Se la stored procedure non riesce in questo scenario, aggiornare il server di pubblicazione a SQL Server 2005 (9.x) Service Pack 1 o versione successiva.

Convenzioni di sintassi Transact-SQL

Sintassi

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

Argomenti

[ @publisher = ] 'publisher' Nome del server di pubblicazione a cui collegarsi. publisher è sysname, senza impostazione predefinita.

[ @publisher_db = ] 'publisher_db'Nome del database del server di pubblicazione a cui collegarsi. publisher_db è sysname, senza impostazione predefinita.

[ @publication = ] 'publication' Nome della pubblicazione a cui collegarsi. publication è sysname, senza impostazione predefinita.

[ @security_mode = ] security_mode Modalità di sicurezza utilizzata dal Sottoscrittore per connettersi a un server di pubblicazione remoto per l'aggiornamento immediato. security_mode è int e può essere uno di questi valori. Se possibile, usare l'autenticazione di Windows.

Valore Descrizione
0 Usa l'autenticazione di SQL Server con l'account di accesso specificato in questa stored procedure come account di accesso e password.

Nota: nelle versioni precedenti di SQL Server questa opzione è stata usata per specificare una chiamata di procedura remota dinamica (RPC).
1 Usa il contesto di sicurezza (autenticazione di SQL Server o autenticazione di Windows) dell'utente che apporta la modifica nel Sottoscrittore.

Nota: questo account deve esistere anche nel server di pubblicazione con privilegi sufficienti. Se si utilizza l'autenticazione di Windows è necessario che sia supportata la delega degli account di sicurezza.
2 Usa un account di accesso al server collegato definito dall'utente esistente creato tramite sp_link_publication.

[ @login = ] 'login' Account di accesso. login è di tipo sysname e il valore predefinito è NULL. Questo parametro deve essere specificato quando security_mode è 0.

[ @password = ] 'password' Password. password è sysname, con un valore predefinito NULL. Questo parametro deve essere specificato quando security_mode è 0.

[ @distributor = ] 'distributor' Nome del server di distribuzione. distributor è sysname, con un valore predefinito NULL.

Valori del codice restituito

0 (esito positivo) o 1 (errore)

Osservazioni:

sp_link_publication viene usato dalle sottoscrizioni ad aggiornamento immediato nella replica transazionale.

sp_link_publication può essere usato sia per le sottoscrizioni push che per le sottoscrizioni pull. Questa stored procedure può essere chiamata prima o dopo la creazione della sottoscrizione. Una voce viene inserita o aggiornata nella tabella di sistema MSsubscription_properties (Transact-SQL).

Per le sottoscrizioni push, la voce può essere pulita sp_subscription_cleanup (Transact-SQL). Per le sottoscrizioni pull, la voce può essere pulita sp_droppullsubscription (Transact-SQL) o sp_subscription_cleanup (Transact-SQL). È anche possibile chiamare sp_link_publication con una password NULL per cancellare la voce nella tabella di sistema MSsubscription_properties (Transact-SQL) per problemi di sicurezza.

La modalità predefinita utilizzata in un Sottoscrittore ad aggiornamento immediato per la connessione al server di pubblicazione non consente la connessione tramite l'autenticazione di Windows. Per eseguire la connessione con questa modalità di autenticazione, è necessario configurare un server collegato per il server di pubblicazione e il Sottoscrittore ad aggiornamento immediato deve utilizzare questa connessione per l'aggiornamento del Sottoscrittore. È quindi necessario eseguire il sp_link_publication con security_mode = 2. Se si utilizza l'autenticazione di Windows è necessario che sia supportata la delega degli account di sicurezza.

Esempio

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

Autorizzazioni

Solo i membri del ruolo predefinito del server sysadmin possono eseguire sp_link_publication.

Vedi anche

sp_droppullsubscription (Transact-SQL)
sp_helpsubscription_properties (Transact-SQL)
sp_subscription_cleanup (Transact-SQL)
Stored procedure di sistema (Transact-SQL)