sp_link_publication (Transact-SQL)

Aplica-se a: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 um Publicador é configurado com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, inclusive 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 Habilitar conexões criptografadas para o mecanismo de banco de dados (SQL Server Configuration Manager).

Importante

Em determinadas condições, esse procedimento armazenado poderá falhar se o Assinante estiver executando o Microsoft SQL Server 2005 (9.x) Service Pack 1 ou posterior e o Publicador estiver executando uma versão anterior. Se o procedimento armazenado falhar nesse cenário, atualize o Publicador para SQL Server 2005 (9.x) Service Pack 1 ou posterior.

Convenções de sintaxe de Transact-SQL

Sintaxe

  
sp_link_publication [ @publisher = ] 'publisher'   
        , [ @publisher_db = ] 'publisher_db'   
        , [ @publication = ] 'publication'   
        , [ @security_mode = ] security_mode  
    [ , [ @login = ] 'login' ]  
    [ , [ @password = ]'password' ]  
    [ , [ @distributor = ] 'distributor' ]  

Argumentos

[ @publisher = ] 'publisher' É o nome do Publicador ao qual vincular. publisher é sysname, sem padrão.

[ @publisher_db = ] 'publisher_db' É o nome do banco de dados do Publicador ao qual vincular. publisher_db é sysname, sem padrão.

[ @publication = ] 'publication' É o nome da publicação à qual vincular. 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 SQL Server Autenticação com o logon especificado neste procedimento armazenado como logon e senha.

Observação: em 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 SQL Server ou Autenticação do Windows) do usuário que está fazendo a alteração no Assinante.

Observação: essa conta também deve existir no Publicador com privilégios suficientes. Ao usar Autenticação do Windows, deve haver suporte para delegação de conta de segurança.
2 Usa um logon de servidor vinculado existente e definido pelo usuário criado usando sp_link_publication.

[ @login = ] 'login' É o logon. login é sysname, com um padrão de NULL. Esse parâmetro deve ser especificado quando security_mode é 0.

[ @password = ] 'password' É a senha. password é sysname, com um padrão de NULL. Esse parâmetro deve ser especificado quando security_mode é 0.

[ @distributor = ] 'distributor' É o nome do Distribuidor. distributor é sysname, com um padrão de NULL.

Valores do código de retorno

0 (êxito) ou 1 (falha)

Comentários

sp_link_publication é usado pela atualização imediata de assinaturas 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 (Transact-SQL ).

Para assinaturas push, a entrada pode ser limpa por sp_subscription_cleanup (Transact-SQL). Para assinaturas pull, a entrada pode ser limpa por sp_droppullsubscription (Transact-SQL) ou sp_subscription_cleanup (Transact-SQL). Você também pode chamar sp_link_publication com uma senha NULL para limpar a entrada na tabela do sistema MSsubscription_properties (Transact-SQL) para 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 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 = 2. Ao usar Autenticação do Windows, deve haver suporte para delegação de conta de segurança.

Exemplo

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

Consulte Também

sp_droppullsubscription (Transact-SQL)
sp_helpsubscription_properties (Transact-SQL)
sp_subscription_cleanup (Transact-SQL)
Procedimentos armazenados do sistema (Transact-SQL)