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 proporcionados 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 más información, consulte Configuración del Motor de base de datos de SQL Server para el cifrado de las conexiones.
Convenciones de sintaxis de Transact-SQL
Sintaxis
sp_link_publication
[ @publisher = ] N'publisher'
, [ @publisher_db = ] N'publisher_db'
, [ @publication = ] N'publication'
, [ @security_mode = ] security_mode
[ , [ @login = ] N'login' ]
[ , [ @password = ] N'password' ]
[ , [ @distributor = ] N'distributor' ]
[ ; ]
Argumentos
[ @publisher = ] N'publisher'
Nombre del publicador al que se va a vincular. @publisher es sysname, sin ningún valor predeterminado.
[ @publisher_db = ] N'publisher_db'
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 = ] N'publication'
Nombre de la publicación a la que se va a vincular. @publication es sysname, sin ningún valor predeterminado.
[ @security_mode = ] security_mode
Modo de seguridad usado por 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.
Valor | Descripción |
---|---|
0 |
Usa la autenticación de SQL Server con el inicio de sesión especificado en este procedimiento almacenado como @login y @password. 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 (autenticación de SQL Server 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 = ] N'login'
Inicio de sesión. @login es sysname, con un valor predeterminado de NULL
. Este parámetro debe especificarse cuando @security_mode es 0
.
[ @password = ] N'password'
La contraseña. @password es sysname, con un valor predeterminado de NULL
. Este parámetro debe especificarse cuando @security_mode es 0
.
[ @distributor = ] N'distributor'
Nombre del distribuidor. @distributor es sysname, con un valor predeterminado de una cadena vacía.
Valores de código de retorno
0
(correcto) o 1
(erróneo).
Comentarios
sp_link_publication
las suscripciones de actualización inmediata se usan en la replicación transaccional.
sp_link_publication
se puede 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 MSsubscription_properties .
En el caso de las suscripciones de inserción, la entrada se puede limpiar sp_subscription_cleanup. Para las suscripciones de extracción, la entrada se puede limpiar sp_droppullsubscription o sp_subscription_cleanup. También puede llamar sp_link_publication
a con una NULL
contraseña para borrar la entrada en la tabla del sistema MSsubscription_properties para problemas de seguridad.
El modo predeterminado usado por 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 sp_link_publication
se ejecute con @security_mode establecido en 2
. Al usar la autenticación de Windows, se debe admitir la delegación de cuentas de seguridad.
Ejemplos
-- 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
.