Como criar uma assinatura push (Programação Transact-SQL de replicação)

As assinaturas pull podem ser criadas de forma programada, usando os procedimentos de replicação armazenados. Os procedimentos armazenados usados dependem do tipo de publicação ao qual a assinatura pertence.

Para criar uma assinatura pull em um instantâneo ou em uma publicação transacional

  1. No Publicador, verifique se a publicação oferece suporte para assinaturas pull executando sp_helppublication (Transact-SQL).

    • Se o valor de allow_pull no conjunto de resultados for 1, a publicação terá suporte para as assinaturas pull.

    • Se o valor de allow_pull for 0, execute sp_changepublication (Transact-SQL), especificando allow_pull para @property e true para @value.

  2. No Assinante, execute sp_addpullsubscription (Transact-SQL). Especifique @publisher e @publication. Para obter mais informações sobre assinaturas de atualização, consulte Como criar uma assinatura atualizável em uma publicação transacional (Programação Transact-SQL de replicação).

  3. No Assinante, execute sp_addpullsubscription_agent (Transact-SQL). Especifique o seguinte:

    • Os parâmetros @publisher, @publisher_db e @publication.

    • As credenciais do Microsoft Windows sob as quais o Distribution Agent do Assinante é executado para @job_login e @job_password.

      ObservaçãoObservação

      As conexões feitas usando a Autenticação Integrada do Windows sempre usam as credenciais do Windows especificadas por @job_login e @password. O Distribution Agent sempre faz a conexão local ao Assinante usando a Autenticação Integrada do Windows. Por padrão, o agente conecta-se ao Distribuidor usando a Autenticação Integrada do Windows.

    • (Opcional) Um valor de 0 para @distributor_security_mode e as informações de logon do MicrosoftSQL Server para @distributor_login e @distributor_password, se for necessário usar a Autenticação do SQL Server ao se conectar ao Distribuidor.

    • Agenda para o trabalho do Distribution Agent para essa assinatura. Para obter mais informações, consulte Como especificar agendas de sincronização (Programação Transact-SQL de replicação).

  4. No Publicador, execute sp_addsubscription (Transact-SQL) para registrar a assinatura pull. Especifique @publication, @subscriber e @destination_db. Especifique um valor de pull para @subscription_type.

Para criar uma assinatura pull para a publicação de mesclagem

  1. No Publicador, verifique se a publicação tem suporte para assinaturas pull executando o sp_helpmergepublication (Transact-SQL).

    • Se o valor de allow_pull no conjunto de resultados for 1, a publicação terá suporte para as assinaturas pull.

    • Se o valor de allow_pull for 0, execute sp_changemergepublication (Transact-SQL), especificando allow_pull para @property e true para @value.

  2. No Assinante, execute sp_addmergepullsubscription (Transact-SQL). Especifique @publisher, @publisher_db, @publication e os parâmetros a seguir:

    • @subscriber_type – especifique local para uma assinatura de cliente e global para uma assinatura de servidor.

    • @subscription_priority – especifique uma prioridade para a assinatura (0.00 a 99.99). Isso só é necessário para uma assinatura de servidor.

      Para obter mais informações, consulte Detecção e resolução de conflito de replicação de mesclagem avançada.

  3. No Assinante, execute sp_addmergepullsubscription_agent (Transact-SQL). Especifique os seguintes parâmetros:

    • @publisher, @publisher_db e @publication.

    • As credenciais do Windows sob as quais o Merge Agent no Assinante é executado para @job_login e @job_password.

      ObservaçãoObservação

      As conexões realizadas com Autenticação Integrada do Windows sempre usam as credenciais do Windows especificadas por @job_login e @password. O Merge Agent sempre faz a conexão local ao Assinante usando a Autenticação Integrada do Windows. Por padrão, o agente se conecta ao Distribuidor e ao Publicador usando a Autenticação Integrada do Windows.

    • (Opcional) Um valor 0 para @distributor_security_mode e as informações de logon do SQL Server para @distributor_login e para @distributor_password, se for necessário usar a Autenticação SQL Server ao conectar-se com o Distribuidor.

    • (Opcional) Um valor 0 para @publisher_security_mode e as informações de logon do SQL Server para @publisher_login e @publisher_password, se for necessário usar a Autenticação SQL Server ao conectar-se ao Publicador.

    • Agenda para o trabalho do Merge Agent para essa assinatura. Para obter mais informações, consulte Como especificar agendas de sincronização (Programação Transact-SQL de replicação).

  4. No Publicador, execute sp_addmergesubscription (Transact-SQL). Especifique @publication, @subscriber, @subscriber_db e um valor de pull para @subscription_type. Isso registra a assinatura pull.

Exemplo

O exemplo a seguir cria uma nova assinatura pull para uma publicação transacional. O primeiro lote é executado no Assinante, e o segundo lote é executado no Publicador. Os valores para o logon e senha são fornecidos no tempo de execução usando as variáveis sqlcmd scripting.

-- 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'AdventureWorks';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorksReplica]
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
-- 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 Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';

-- At the Publisher, register the subscription, using the defaults.
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'pull',
  @status = N'subscribed';
GO

O exemplo a seguir cria uma nova assinatura pull para uma publicação de mesclagem. O primeiro lote é executado no Assinante, e o segundo lote é executado no Publicador. Os valores para o logon e senha são fornecidos no tempo de execução usando as variáveis sqlcmd scripting.

-- 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;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks';
SET @hostname = N'adventure-works\david8';

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [AdventureWorksReplica]
EXEC sp_addmergepullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription. 
EXEC sp_addmergepullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password),
  @hostname = @hostname;
GO
-- Execute this batch at the Publisher.
DECLARE @myMergePub  AS sysname;
DECLARE @mySub       AS sysname;
DECLARE @mySubDB     AS sysname;

SET @myMergePub = N'AdvWorksSalesOrdersMerge';
SET @mySub = N'MYSUBSERVER';
SET @mySubDB = N'AdventureWorksReplica';

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks]
EXEC sp_addmergesubscription @publication = @myMergePub, 
@subscriber = @mySub, @subscriber_db = @mySubDB, 
@subscription_type = N'pull';
GO