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ç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. Você deve criptografar a conexão entre o Publicador e seu Distribuidor remoto antes de executar esse procedimento armazenado. Para obter mais informações, consulte Habilitar conexões criptografadas no Mecanismo de Banco de Dados (SQL Server Configuration Manager). |
Importante |
---|
Em certas condições, esse procedimento armazenado pode falhar se o Assinante estiver executando o Microsoft SQL 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. |
Convenções da 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 ao qual vincular-se. publisher é sysname, sem padrão.[ @publisher_db= ] 'publisher_db'
É o nome do banco de dados Publicador ao qual vincular-se. publisher_db é sysname, sem padrão.[ @publication= ] 'publication'
É o nome da publicação a qual vincular-se. publication é sysname, sem padrão.[ @security_mode= ] security_mode
É o modo de segurança usado pelo Assinante para conexão a um Publicador remoto para atualização imediata. security_mode é int, e pode ter 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çã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çã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'AdventureWorks2012';
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 AdventureWorks2012
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'AdventureWorks2012Replica';
SET @subscriber = $(SubServer);
-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2012]
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.
Consulte também
Referência
sp_droppullsubscription (Transact-SQL)
sp_helpsubscription_properties (Transact-SQL)