Compartilhar via


sp_addpullsubscription (Transact-SQL)

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

Adiciona uma assinatura pull a um instantâneo ou publicação transacional. Esse procedimento armazenado é executado no Assinante, no banco de dados onde a assinatura pull será criada.

Convenções de sintaxe de Transact-SQL

Sintaxe

sp_addpullsubscription
    [ @publisher = ] N'publisher'
    [ , [ @publisher_db = ] N'publisher_db' ]
    , [ @publication = ] N'publication'
    [ , [ @independent_agent = ] N'independent_agent' ]
    [ , [ @subscription_type = ] N'subscription_type' ]
    [ , [ @description = ] N'description' ]
    [ , [ @update_mode = ] N'update_mode' ]
    [ , [ @immediate_sync = ] immediate_sync ]
[ ; ]

Argumentos

@publisher [ = ] N'editor'

O nome do Editor. @publisher é sysname, sem padrão.

Observação

O nome do servidor pode ser especificado como <Hostname>,<PortNumber> para uma instância padrão ou <Hostname>\<InstanceName>,<PortNumber> para uma instância nomeada. Especifique o número da porta para sua conexão quando o SQL Server for implantado no Linux ou Windows com uma porta personalizada e o serviço do navegador estiver desabilitado. O uso de números de porta personalizados para distribuidor remoto se aplica ao SQL Server 2019 (15.x) e versões posteriores.

@publisher_db [ = ] N'publisher_db'

O nome do banco de dados Publicador. @publisher_db é sysname, com um padrão de NULL. @publisher_db é ignorado pelos Publicadores Oracle.

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

O nome da publicação. @publication é sysname, sem padrão.

@independent_agent [ = ] N'independent_agent'

Especifica se há um Agente de Distribuição autônomo para esta publicação. @independent_agent é nvarchar(5), com um padrão de true.

  • Se true, há um Agente de Distribuição independente para esta publicação.
  • Se false, houver um Distribution Agent para cada par de banco de dados do Publicador/banco de dados do Assinante.

@independent_agent é uma propriedade da publicação e deve ter o mesmo valor que o Publicador.

@subscription_type [ = ] N'subscription_type'

O tipo de assinatura. @subscription_type é nvarchar(9), com um padrão de anonymous. Você deve especificar um valor de pull para @subscription_type, a menos que queira criar uma assinatura sem registrar a assinatura no Publicador. Nesse caso, você deve especificar um valor de anonymous. Isso é necessário para casos em que você não pode estabelecer uma conexão do SQL Server com o Publicador durante a configuração da assinatura.

@description [ = ] N'descrição'

A descrição da publicação. @description é nvarchar(100), com um padrão de NULL.

@update_mode [ = ] N'update_mode'

O tipo de atualização. @update_mode é nvarchar(30) e pode ser um dos seguintes valores.

Valor Descrição
read only (padrão) A assinatura é somente leitura. Quaisquer alterações no Assinante não são enviadas de volta ao Publicador. Deve ser usado quando as atualizações não são feitas no Assinante.
synctran Habilita suporte para assinaturas de atualização imediata.
queued tran Habilita a assinatura de atualização enfileirada. As modificações de dados podem ser feitas no Assinante, armazenadas em uma fila e, depois, propagadas ao Publicador.
failover Habilita a assinatura para atualização imediata com atualização enfileirada como um failover. Modificações de dados podem ser feitas no Assinante e propagadas ao Publicador imediatamente. Se o Publicador e o Assinante não estiverem conectados, as modificações de dados feitas no Assinante poderão ser armazenadas em uma fila até que o Assinante e o Publicador sejam reconectados.
queued failover Observação: Não há suporte para Publicadores Oracle.

Habilita a assinatura como uma assinatura de atualização enfileirada com a capacidade de alterar para o modo de atualização imediata. Modificações de dados podem ser feitas no Assinante e armazenadas em uma fila até que a conexão seja estabelecida entre o Assinante e o Publicador. Quando uma conexão contínua é estabelecida, o modo de atualização pode ser alterado para atualização imediata.

@immediate_sync [ = ] immediate_sync

Especifica se os arquivos de sincronização são criados ou recriados sempre que o Snapshot Agent é executado. @immediate_sync é bit, com um padrão de 1, e deve ser definido com o mesmo valor que @immediate_sync em sp_addpublication. @immediate_sync é uma propriedade da publicação e deve ter o mesmo valor que o Publicador.

Valores do código de retorno

0 (sucesso) ou 1 (falha).

Comentários

sp_addpullsubscription é usado na replicação de instantâneo e na replicação transacional.

Importante

Para assinaturas de atualização enfileiradas, use a Autenticação do SQL Server para conexões com Assinantes e especifique uma conta diferente para a conexão com cada Assinante. Ao criar uma assinatura pull que dá suporte à atualização enfileirada, a replicação sempre define a conexão para usar a Autenticação do Windows (para assinaturas pull, a replicação não pode acessar metadados no Assinante necessário para usar a Autenticação do SQL Server). Nesse caso, você deve executar sp_changesubscription para alterar a conexão para usar a Autenticação do SQL Server depois que a assinatura for configurada.

Se a tabela MSreplication_subscriptions não existir no Assinante, sp_addpullsubscription crie-a. Ele também adiciona uma linha à tabela MSreplication_subscriptions . Para assinaturas pull, sp_addsubscription deve ser chamado primeiro no Publicador.

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 @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2022';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorks2022Replica]
EXEC sp_addpullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

Permissões

Somente membros da função de servidor fixa sysadmin ou db_owner função de banco de dados fixa podem executar sp_addpullsubscription.