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

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

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

Quando possível, solicite aos usuários que insiram as credenciais de segurança em tempo de execução. Sendo necessário armazenar credenciais em um arquivo de script, proteja o arquivo para evitar acesso não autorizado.

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

  1. No Publicador do banco de dados de publicação, verifique se a publicação oferece suporte às assinaturas push, executando sp_helppublication.

    • Se o valor de allow_push for 1, as assinaturas push terão suporte.

    • Se o valor de allow_push for 0, execute sp_changepublication, especificando allow_push para @property e true para @value.

  2. No Publicador do banco de dados de publicação, execute sp_addsubscription. Especifique @publication, @subscriber e @destination_db. Especifique um valor push para @subscription_type. Para obter mais informações sobre como atualizar assinaturas, consulte Como criar uma assinatura atualizável em uma publicação transacional (Programação Transact-SQL de replicação).

  3. No Publicador do banco de dados de publicação, execute sp_addpushsubscription_agent. Especifique o seguinte:

    • Os parâmetros @subscriber, @subscriber_db e @publication.

    • As credenciais do Windows Microsoft com as quais o Distribution Agent do Distribuidor é 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 com o Distribuidor usando a Autenticação Integrada do Windows. Por padrão, o agente se conecta ao Assinante usando a Autenticação Integrada do Windows.

    • (Opcional) Valor de 0 para @subscriber_security_mode e informações de logon do MicrosoftSQL Server para @subscriber_login e @subscriber_password. Especifique esses parâmetros se for necessário usar a Autenticação do SQL Server para conexão com o Assinante.

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

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

     Ao criar uma assinatura push em um Publicador com um Distribuidor remoto, os valores especificados para todos os parâmetros, inclusive job_login e job_password são enviados para o 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.

Para criar assinatura push para publicação de mesclagem

  1. No Publicador do banco de dados de publicação, verifique se a publicação oferece suporte às assinaturas push, executando sp_helpmergepublication.

    • Se o valor de allow_push for 1, a publicação dará suporte às assinaturas push.

    • Se o valor de allow_push não for 1, execute sp_changemergepublication, especificando allow_push para @property e true para @value.

  2. No Publicador, no banco de dados de publicação, execute sp_addmergesubscription, especificando os seguintes parâmetros:

    • @publication. Esse é o nome da publicação.

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

    • @subscription_priority. Para uma assinatura de servidor, especifique uma prioridade para a assinatura de (0,00 a 99,99).

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

  3. No Publicador do banco de dados de publicação, execute sp_addmergepushsubscription_agent. Especifique o seguinte:

    • Os parâmetros @subscriber, @subscriber_db e @publication.

    • As credenciais do Windows sob as quais o Merge Agent no Distribuidor é executado para o @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 Merge Agent sempre faz a conexão local com o Distribuidor usando a Autenticação Integrada do Windows. Por padrão, o agente se conecta ao Assinante usando a Autenticação Integrada do Windows.

    • (Opcional) Valor de 0 para @subscriber_security_mode e informações de logon do SQL Server para @subscriber_login e @subscriber_password. Especifique esses parâmetros se for necessário usar a Autenticação do SQL Server para conexão com o Assinante.

    • (Opcional) Valor de 0 para @publisher_security_mode e informações de logon do SQL Server para @publisher_login e @publisher_password. Especifique esses valores se for necessário usar a Autenticação do SQL Server para conexão com o 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).

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

     Ao criar uma assinatura push em um Publicador com um Distribuidor remoto, os valores especificados para todos os parâmetros, inclusive job_login e job_password são enviados para o 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.

Exemplo

O exemplo a seguir cria uma nova assinatura push para uma publicação transacional. Os valores de logon e senha são fornecidos em tempo de execução, usando as variáveis de script sqlcmd.

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

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks]
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

O exemplo a seguir cria uma nova assinatura push para uma publicação de mesclagem. Os valores de logon e senha são fornecidos em tempo de execução, usando as variáveis de script sqlcmd.

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

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @hostname = @hostname;

--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO