sp_link_publication (Transact-SQL)
Aplica-se: SQL Server
Define as informações de configuração e de segurança usadas por gatilhos de sincronização de assinaturas de atualização imediata na conexão com o Publicador. Esse procedimento armazenado é executado no Assinante no banco de dados de assinatura.
Importante
Quando você configura um Publicador com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, incluindo @job_login e @job_password, são enviados ao Distribuidor como texto sem formatação. Você deve criptografar a conexão entre o Publicador e seu Distribuidor remoto antes de executar esse procedimento armazenado. Para obter mais informações, confira Configurar o Mecanismo de Banco de Dados do SQL Server para criptografia de conexões.
Convenções de sintaxe de Transact-SQL
Sintaxe
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'editor'
O nome do editor ao qual vincular. @publisher é sysname, sem padrão.
@publisher_db [ = ] N'publisher_db'
O nome do banco de dados do Publicador ao qual vincular. @publisher_db é sysname, sem padrão.
@publication [ = ] N'publicação'
O nome da publicação a ser vinculada. @publication é sysname, sem padrão.
@security_mode [ = ] security_mode
O modo de segurança usado pelo Assinante para se conectar a um Publicador remoto para atualização imediata. @security_mode é int e pode ser um desses valores. Quando possível, use a autenticação do Windows.
Valor | Descrição |
---|---|
0 |
Usa a Autenticação do SQL Server com o logon especificado neste procedimento armazenado como @login e @password. Observação: nas versões anteriores do SQL Server, essa opção era usada para especificar uma RPC (chamada de procedimento remoto dinâmico). |
1 |
Usa o contexto de segurança (Autenticação do SQL Server ou Autenticação do Windows) do usuário que faz a alteração no Assinante. Observação: essa conta também deve existir no Publicador com privilégios suficientes. Quando você usa a Autenticação do Windows, a delegação de conta de segurança deve ter suporte. |
2 |
Usa um logon de servidor vinculado existente e definido pelo usuário criado usando sp_link_publication o . |
@login [ = ] N'login'
O login. @login é sysname, com um padrão de NULL
. Esse parâmetro deve ser especificado quando @security_mode for 0
.
@password [ = ] N'senha'
A senha. @password é sysname, com um padrão de NULL
. Esse parâmetro deve ser especificado quando @security_mode for 0
.
@distributor [ = ] N'distribuidor'
O nome do Distribuidor. @distributor é sysname, com um padrão de uma string vazia.
Valores do código de retorno
0
(sucesso) ou 1
(falha).
Comentários
sp_link_publication
é usado por assinaturas de atualização imediata na replicação transacional.
sp_link_publication
pode ser usado para assinaturas push e pull. Pode ser chamado antes ou depois que a assinatura é criada. Uma entrada é inserida ou atualizada na tabela do sistema MSsubscription_properties .
Para assinaturas push, a entrada pode ser limpa pelo sp_subscription_cleanup. Para assinaturas pull, a entrada pode ser limpa por sp_droppullsubscription ou sp_subscription_cleanup. Você também pode chamar sp_link_publication
com uma NULL
senha para limpar a entrada na tabela do sistema MSsubscription_properties por questões de segurança.
O modo padrão usado por um Assinante de atualização imediata quando ele se conecta ao Publicador não permite uma conexão usando a Autenticação do Windows. Para se conectar ao modo de Autenticação do Windows, um servidor vinculado precisa ser definido como Publicador e o Assinante de atualização imediata deve usar essa conexão ao atualizar o Assinante. Isso requer que o sp_link_publication
seja executado com @security_mode definido como 2
. Quando você usa a Autenticação do Windows, a delegação de conta de segurança deve ter suporte.
Exemplos
-- 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
Permissões
Somente membros da função de servidor fixa sysadmin podem executar sp_link_publication
.