sp_link_publication (Transact-SQL)

Imposta le informazioni di configurazione e protezione 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.

Nota sulla sicurezzaNota sulla sicurezza

 Quando si configura un server di distribuzione remoto per un server di pubblicazione, 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 ulteriori informazioni, vedere Crittografia delle connessioni a SQL Server.

Nota importanteImportante

In determinate condizioni, la stored procedure può avere esito negativo se il Sottoscrittore esegue Microsoft SQL Server 2005 Service Pack 1 o versioni successive e il server di pubblicazione esegue una versione precedente. In caso di esito negativo della stored procedure in questo scenario, aggiornare il server di pubblicazione a SQL Server 2005 Service Pack 1 o versioni successive.

Icona di collegamento a un argomentoConvenzioni della 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 è di tipo sysname e non prevede alcun valore predefinito.

  • [ @publisher_db= ] 'publisher_db'
    Nome del database del server di pubblicazione a cui collegarsi. publisher_db è di tipo sysname e non prevede alcun valore predefinito.

  • [ @publication= ] 'publication'
    Nome della pubblicazione a cui collegarsi. publication è di tipo sysname e non prevede alcun valore predefinito.

  • [ @security_mode= ] security_mode
    Modalità di protezione utilizzata dal Sottoscrittore per la connessione a un server di pubblicazione remoto per l'aggiornamento immediato. security_mode è di tipo int. I possibili valori sono i seguenti. Se possibile, utilizzare l'autenticazione di Windows.

    Valore

    Descrizione

    0

    Utilizzare l'autenticazione di SQL Server con l'account di accesso specificato in questa stored procedure come login e password.

    NotaNota
    Nelle versioni precedenti di SQL Server, questa opzione viene utilizzata per specificare una chiamata di procedura remota (RPC) dinamica.

    1

    Utilizza il contesto di protezione (autenticazione di SQL Server o autenticazione di Windows) dell'utente che esegue la modifica nel Sottoscrittore.

    NotaNota
    È inoltre necessario che tale account esista nel server di pubblicazione e disponga di privilegi sufficienti. Se si utilizza l'autenticazione di Windows è necessario che sia supportata la delega degli account di protezione.

    2

    Utilizza un account di accesso esistente e definito dall'utente per il server collegato, creato con sp_link_publication.

  • [ @login= ] 'login'
    Account di accesso. login è di tipo sysname e il valore predefinito è NULL. È necessario specificare questo parametro quando il valore di security_mode è 0.

  • [ @password = ] 'password'
    Password. password è di tipo sysname e il valore predefinito è NULL. È necessario specificare questo parametro quando il valore di security_mode è 0.

  • [ @distributor= ] 'distributor'
    Nome del server di distribuzione. distributor è di tipo sysname e il valore predefinito è NULL.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Osservazioni

La stored procedure sp_link_publication viene utilizzata dalle sottoscrizioni ad aggiornamento immediato nella replica transazionale.

È possibile utilizzare sp_link_publication sia per sottoscrizioni push che pull. Questa stored procedure può essere chiamata prima o dopo la creazione della sottoscrizione. Nella tabella di sistema MSsubscription_properties (Transact-SQL) viene inserita o aggiornata una voce.

La voce della tabella di sistema può essere rimossa tramite sp_subscription_cleanup (Transact-SQL) per le sottoscrizioni push e tramite sp_droppullsubscription (Transact-SQL) o sp_subscription_cleanup (Transact-SQL) per le sottoscrizioni pull. È inoltre possibile chiamare sp_link_publication con una password NULL per eliminare la voce nella tabella di sistema MSsubscription_properties (Transact-SQL) per motivi di protezione.

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. A tale scopo, è necessario eseguire sp_link_publication con security_mode = 2. Se si utilizza l'autenticazione di Windows è necessario che sia supportata la delega degli account di protezione.

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'AdventureWorks2008R2';
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 AdventureWorks2008R2;
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'AdventureWorks2008R2Replica'; 
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2008R2]
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.