Share via


sp_link_publication (Transact-SQL)

Se aplica a:SQL Server

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.

Importante

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. Antes de ejecutar este procedimiento almacenado, se recomienda cifrar la conexión entre el publicador y su distribuidor remoto. Para obtener más información, vea Habilitar conexiones cifradas en el motor de base de datos (Administrador de configuración de SQL Server).

Importante

En determinadas condiciones, este procedimiento almacenado puede producir un error si el suscriptor ejecuta Microsoft SQL Server 2005 (9.x) Service Pack 1 o posterior y el publicador ejecuta una versión anterior. Si se produce un error en el procedimiento almacenado en este escenario, actualice el publicador a SQL Server 2005 (9.x) Service Pack 1 o posterior.

Convenciones 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 al que se va a vincular. publisher es sysname, sin ningún valor predeterminado.

[ @publisher_db = ] 'publisher_db' Es el nombre de la base de datos del publicador a la que se va a vincular. publisher_db es sysname, sin ningún valor predeterminado.

[ @publication = ] 'publication' Es el nombre de la publicación a la que se va a vincular. publication es sysname, sin ningún valor predeterminado.

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

Value Descripción
0 Usa SQL Server autenticación con el inicio de sesión especificado en este procedimiento almacenado como inicio de sesión y contraseña.

Nota: En versiones anteriores de SQL Server, esta opción se usó para especificar una llamada dinámica a procedimiento remoto (RPC).
1 Usa el contexto de seguridad (SQL Server autenticación o autenticación de Windows) del usuario que realiza el cambio en el suscriptor.

Nota: 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 Usa un inicio de sesión de servidor vinculado definido por el usuario existente creado mediante 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 debe especificarse cuando security_mode es 0.

[ @password = ] 'password' Es la contraseña. password es sysname, con un valor predeterminado de NULL. Este parámetro debe especificarse cuando security_mode es 0.

[ @distributor = ] 'distributor' Es el nombre del distribuidor. distributor es sysname, con un valor predeterminado de NULL.

Valores de código de retorno

0 (correcto) o 1 (error)

Comentarios

sp_link_publication se usa mediante la actualización inmediata de suscripciones en la replicación transaccional.

sp_link_publication se pueden usar para suscripciones de inserción y extracción. Se puede llamar antes o después de haber creado la suscripción. Una entrada se inserta o actualiza en la tabla del sistema de MSsubscription_properties (Transact-SQL ).

En el caso de las suscripciones de inserción, la entrada se puede limpiar sp_subscription_cleanup (Transact-SQL). En el caso de las suscripciones de extracción, la entrada se puede limpiar mediante sp_droppullsubscription (Transact-SQL) o sp_subscription_cleanup (Transact-SQL). También puede llamar a sp_link_publication con una contraseña NULL para borrar la entrada en la tabla del sistema de MSsubscription_properties (Transact-SQL) para problemas 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 el sp_link_publication se ejecute 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'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

Permisos

Solo los miembros del rol fijo de servidor sysadmin pueden ejecutar sp_link_publication.

Consulte también

sp_droppullsubscription (Transact-SQL)
sp_helpsubscription_properties (Transact-SQL)
sp_subscription_cleanup (Transact-SQL)
Procedimientos almacenados del sistema (Transact-SQL)