Partilhar via


sp_link_publication (Transact-SQL)

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.

Observação sobre segurançaObservação sobre segurança

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. Criptografe a conexão entre o Publicador e seu Distribuidor remoto antes de executar esse procedimento armazenado. Para obter mais informações, consulte Criptografando conexões com o SQL Server.

Observação importanteImportante

Em certas condições, esse procedimento armazenado pode falhar se o Assinante estiver executando o MicrosoftSQL Server 2005 Service Pack 1 ou versão posterior e o Publicador estiver executando uma versão anterior. Se o procedimento armazenado falhar neste cenário, atualize o Publicador para a versão do SQL Server 2005 Service Pack 1 ou posterior.

Ícone de vínculo de tópicoConvenções de sintaxe 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 com o qual vincular. publisher é sysname, sem padrão.

  • [ @publisher_db= ] 'publisher_db'
    É o nome do banco de dados 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 na conexão com um Publicador remoto para atualização imediata. security_mode é int, e pode ser um destes valores. Quando possível, use a Autenticação do Windows.

    Valor

    Descrição

    0

    Usa Autenticação do SQL Server com o logon especificado nesse procedimento armazenado como logon e senha.

    ObservaçãoObservação
    Em versões anteriores do SQL Server, essa opção foi usada para especificar uma RPC (chamada de procedimento remoto) dinâmica.

    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çãoObservaçã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 definido pelo usuário criado usando sp_link_publication.

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

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

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

Valores de código de retorno

0 (êxito) ou 1 (falha)

Comentários

sp_link_publication é usado por assinaturas de atualização imediata em 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) 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 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 exige que 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'AdventureWorks';
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 AdventureWorks
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'AdventureWorksReplica'; 
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO

Permissões

Apenas membros da função de servidor fixa sysadmin podem executar sp_link_publication.