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

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