sp_link_publication (Transact-SQL)

Establece la información de configuración y de seguridad que utilizan los desencadenadores de sincronización de las suscripciones de actualización inmediata al conectar con el publicador. Este procedimiento almacenado se ejecuta en el suscriptor de la base de datos de suscripciones.

Nota de seguridadNota de seguridad

 Al configurar un publicador con un distribuidor remoto, los valores suministrados para todos los parámetros, incluidos job_login y job_password, se envían al distribuidor como texto sin formato. Debe cifrar la conexión entre el publicador y su distribuidor remoto antes de ejecutar este procedimiento almacenado. Para obtener más información, vea Cifrar conexiones a SQL Server.

Nota importanteImportante

En determinadas condiciones, este procedimiento almacenado puede generar un error si en el suscriptor se ejecuta el Service Pack 1 de MicrosoftSQL Server 2005 o posterior y en el publicador se ejecuta una versión anterior. Si el procedimiento almacenado genera un error en este escenario, actualice el publicador al Service Pack 1 de SQL Server 2005 o posterior.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • [ @publisher = ] 'publisher'
    Es el nombre del publicador con el que se establece el vínculo. publisher es de tipo sysname y no tiene ningún valor predeterminado.

  • [ @publisher_db= ] 'publisher_db'
    Es el nombre de la base de datos del publicador con el que se establece el vínculo. publisher_db es de tipo sysname y no tiene ningún valor predeterminado.

  • [ @publication= ] 'publication'
    Es el nombre de la publicación con la que se establece el vínculo. publication es de tipo sysname y no tiene ningún valor predeterminado.

  • [ @security_mode= ] security_mode
    Es el modo de seguridad utilizado por el suscriptor para conectarse a un publicador remoto para la actualización inmediata. security_mode es de tipo int y puede ser uno de los valores siguientes. Siempre que sea posible, utilice la autenticación de Windows.

    Valor

    Descripción

    0

    Utiliza la autenticación de SQL Server con el inicio de sesión especificado en este procedimiento almacenado como login y password.

    NotaNota
    En versiones anteriores de SQL Server, esta opción se utiliza para especificar una llamada a procedimiento remoto (RPC) dinámico.

    1

    Utiliza el contexto de seguridad (autenticación de SQL Server o autenticación de Windows) del usuario que realiza el cambio en el suscriptor.

    NotaNota
    Esta cuenta también debe existir en el publicador con privilegios suficientes. Al usar la autenticación de Windows, se debe admitir la delegación de cuentas de seguridad.

    2

    Utiliza un inicio de sesión de servidor vinculado definido por el usuario existente y creado con sp_link_publication.

  • [ @login= ] 'login'
    Es el inicio de sesión. login es de tipo sysname y su valor predeterminado es NULL. Este parámetro se debe especificar si security_mode es 0.

  • [ @password = ] 'password'
    Es la contraseña. password es de tipo sysname y su valor predeterminado es NULL. Este parámetro se debe especificar si security_mode es 0.

  • [ @distributor= ] 'distributor'
    Es el nombre del distribuidor. distributor es de tipo sysname y su valor predeterminado es NULL.

Valores de código de retorno

0 (correcto) o 1 (error)

Notas

sp_link_publication se utiliza para las suscripciones de actualización inmediata en la replicación transaccional.

sp_link_publication se puede utilizar para suscripciones de extracción e inserción. Se puede llamar antes o después de haber creado la suscripción. Al hacerlo se inserta o actualiza una entrada de la tabla de sistema MSsubscription_properties (Transact-SQL).

Para las suscripciones de inserción, la entrada se puede limpiar con sp_subscription_cleanup (Transact-SQL). Para las suscripciones de extracción, la entrada se puede limpiar con sp_droppullsubscription (Transact-SQL) o sp_subscription_cleanup (Transact-SQL). También puede llamar a sp_link_publication con NULL como contraseña para borrar la entrada de la tabla de sistema MSsubscription_properties (Transact-SQL) por motivos de seguridad.

El modo predeterminado que utiliza un suscriptor de actualización inmediata cuando se conecta al publicador no permite una conexión mediante la autenticación de Windows. Para conectar con un modo de autenticación de Windows, se deberá configurar un servidor vinculado como publicador, y el suscriptor de actualización inmediata debe utilizar esta conexión cuando actualice el suscriptor. Esto requiere que se ejecute sp_link_publication con security_mode = 2. Al usar la autenticación de Windows, se debe admitir la delegación de cuentas de seguridad.

Ejemplo

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

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

Permisos

Sólo los miembros de la función fija de servidor sysadmin pueden ejecutar sp_link_publication.