sys.sp_link_publication (Transact-SQL)

Aplica-se a: SQL Server

Define a configuração e a informação de segurança usadas pelos gatilhos de sincronização de atualização imediata das subscrições ao ligar-se ao Publisher. Este procedimento armazenado é executado no Assinante na base de dados de subscrição.

Importante

Quando configura um Publisher com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, incluindo @job_login e @job_password, são enviados ao Distribuidor em texto simples. Deve encriptar a ligação entre o Publisher e o seu Distribuidor remoto antes de executar este procedimento armazenado. Para obter mais informações, consulte Configurar o Mecanismo de Banco de Dados do SQL Server para criptografar conexões.

Transact-SQL convenções de sintaxe

Syntax

sys.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' ]
[ ; ]

Arguments

@publisher [ = ] N'editor'

O nome do Publisher para linkar. @publisher é sysname, sem padrão.

[ @publisher_db = ] N'publisher_db'

O nome da base de dados Publisher para ligar a ele. @publisher_db é sysname, sem padrão.

[ @publication = ] N'publicação'

O nome da publicação para a qual se deve fazer o link. @publication é sysname, sem padrão.

@security_mode [ = ] security_mode

O modo de segurança usado pelo Assinante para se ligar a um Publisher remoto para atualização imediata. @security_mode é int, e pode ser um desses valores. Quando possível, use a autenticação do Windows.

Valor Description
0 Utiliza SQL Server Autenticação com o login especificado neste procedimento armazenado como @login e @password.

Nota: Em versões anteriores do SQL Server, esta opção era usada para especificar uma chamada dinâmica de procedimento remoto (RPC).
1 Utiliza o contexto de segurança (Autenticação SQL Server ou Autenticação Windows) do utilizador que faz a alteração no Assinante.

Nota: Esta conta deve também existir no Publisher com privilégios suficientes. Quando usa a Autenticação Windows, a delegação de contas de segurança deve ser suportada.
2 Utiliza um login de servidor ligado definido pelo utilizador criado usando sp_link_publication.

@login [ = ] N'login'

O login. @login é sysname, com um padrão de NULL. Este parâmetro deve ser especificado quando @security_mode é 0.

[ @password = ] N'senha'

A senha. @password é sysname, com um padrão de NULL. Este parâmetro deve ser especificado quando @security_mode é 0.

@distributor [ = ] N'distribuidor'

O nome do Distribuidor. @distributor é sysname, com o padrão de uma cadeia vazia.

Valores de código de retorno

0 (sucesso) ou 1 (fracasso).

Remarks

sp_link_publication é usado pela atualização imediata de subscrições na replicação transacional.

sp_link_publication pode ser usado tanto para subscrições push como pull. Pode ser chamada antes ou depois da criação da subscrição. Uma entrada é inserida ou atualizada na tabela do sistema MSsubscription_properties .

Para subscrições push, a entrada pode ser limpa por sp_subscription_cleanup. Para subscrições extraídas, a entrada pode ser limpa por sp_droppullsubscription ou sp_subscription_cleanup. Também pode ligar sp_link_publication com uma NULL palavra-passe para apagar a entrada na tabela do sistema MSsubscription_properties por questões de segurança.

O modo predefinido usado por um Assinante que atualiza imediatamente quando se liga ao Publisher não permite uma ligação usando a Autenticação do Windows. Para se ligar a um modo de Autenticação Windows, tem de ser configurado um servidor ligado ao Publisher, e o Assinante que atualiza imediatamente deve usar esta ligação ao atualizar o Assinante. Isto requer que o sp_link_publication seja executado com @security_mode definido em 2. Quando usa a Autenticação Windows, a delegação de contas de segurança deve ser suportada.

Examples

-- 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

Permissions

Somente membros da função de servidor fixa sysadmin podem executar sp_link_publicationo .