Como criar uma assinatura atualizável em uma publicação transacional (Programação Transact-SQL de replicação)

ObservaçãoObservação

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

A replicação transacional permite que mudanças sejam realizadas em um Assinante para serem propagadas de volta para o Publicador usando assinaturas de atualizações imediatas ou colocadas em fila. Você pode criar uma assinatura de atualização de forma programada, usando os procedimentos de replicação armazenados.

Para criar uma assinatura pull de atualização imediata

  1. No Publicador, verifique se a publicação tem suporte para assinaturas de atualização imediata executando sp_helppublication.

  2. No Publicador, verifique se a publicação tem suporte para assinaturas pull executando sp_helppublication.

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

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

  3. No Assinante, execute sp_addpullsubscription. Especifique @publisher, @publication e um dos valores a seguir para @update_mode:

    • synctran - habilita a assinatura para atualização imediata.

    • failover - habilita a assinatura para atualização imediata com a atualização em fila como opção do failover.

      ObservaçãoObservação

      failover requer que a publicação também esteja habilitada para assinaturas de atualização em fila.

  4. No Assinante, execute sp_addpullsubscription_agent. 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 realizadas com o uso da Autenticação Integrada do Windows sempre são feitas com as credenciais do Windows especificadas por @job_login e @job_password. O Distribution 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 usando a Autenticação Integrada do Windows.

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

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

  5. No Assinante, no banco de dados de assinatura, execute sp_link_publication. Especifique @publisher, @publication, o nome do banco de dados de publicação para @ publisher_db e um dos valores a seguir para @security_mode:

    • 0 - Use a Autenticação SQL Server ao realizar atualizações no Publicador. Essa opção exige que você especifique um logon válido no Publicador para @login e para @password.

    • 1 - Use o contexto de segurança do usuário que faz alterações no Assinante quando se conecta ao Publicador. Consulte sp_link_publication quanto às restrições relacionadas a este modo de segurança.

    • 2 - Use um logon de servidor vinculado, existente, definido pelo usuário criado usando sp_addlinkedserver.

  6. No Publicador, execute sp_addsubscription especificando @publication, @subscriber, @destination_db, um valor para recepção do @subscription_type e o mesmo valor especificado na etapa 3 para @update_mode.

    Isto registra a assinatura pull no Publicador.

Para criar uma assinatura push de atualização imediata

  1. No Publicador, verifique se a publicação tem suporte para assinaturas de atualização imediata executando o sp_helppublication.

  2. No Publicador, verifique se a publicação tem suporte para assinaturas push executando o sp_helppublication.

    • Se o valor de allow_push no conjunto de resultados for 1, a publicação tem suporte para assinaturas push.

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

  3. No Publicador, execute sp_addsubscription. Especifique @publication@subscriber, @destination_db e um dos valores a seguir para @update_mode:

    • synctran - habilita o suporte para a atualização imediata.

    • failover - habilita o suporte para atualização imediata com a atualização em fila como opção do failover.

      ObservaçãoObservação

      failover requer que a publicação também esteja habilitada para assinaturas de atualização em fila.

  4. No Publicador, execute sp_addpushsubscription_agent. Especifique os seguintes parâmetros:

    • @subscriber, @subscriber_db e @publication.

    • As credenciais do Windows com as quais o Distribution Agent do Distribuidor é executado para @job_login e @job_password.

      ObservaçãoObservação

      As conexões realizadas com o uso da Autenticação Integrada do Windows sempre são feitas com as credenciais do Windows especificadas por @job_login e @job_password. O Distribution Agent sempre faz a conexão local ao Distribuidor usando a Autenticação Integrada do Windows. Por padrão, o agente se conectará ao Assinante usando a Autenticação Integrada do Windows.

    • (Opcional) Um valor 0 para @subscriber_security_mode e as informações de logon do SQL Server para @subscriber_login e para @subscriber_password, se for necessário usar a Autenticação SQL Server ao se conectar ao Assinante.

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

  5. No Assinante, no banco de dados de assinatura, execute sp_link_publication. Especifique o @publisher, @publication, o nome do banco de dados de publicação para o @publisher_db, e um dos valores a seguir para o @security_mode:

    • 0 - Use a Autenticação SQL Server ao realizar atualizações no Publicador. Essa opção exige que você especifique um logon válido no Publicador para @login e para @password.

    • 1 - Use o contexto de segurança do usuário que faz alterações no Assinante quando se conecta ao Publicador. Consulte a sp_link_publication quanto às restrições relacionadas a este modo de segurança.

    • 2 - Use um logon de servidor vinculado, existente, definido pelo usuário criado usando sp_addlinkedserver.

Para criar uma assinatura pull de atualização em fila

  1. No Publicador, verifique se a publicação tem suporte para assinaturas de atualização em fila executando sp_helppublication.

  2. No Publicador, verifique se a publicação tem suporte para assinaturas pull executando sp_helppublication.

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

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

  3. No Assinante, execute sp_addpullsubscription. Especifique @publisher e @publication e um dos valores a seguir para @update_mode:

    • queued tran - habilita a assinatura de atualização em fila.

    • failover em fila - habilita o suporte para atualização em fila com a atualização imediata como opção do failover.

      ObservaçãoObservação

      failover em fila requer que a publicação também esteja habilitada para assinaturas de atualização imediata. Para failover de atualização imediata, você deve usar sp_link_publication para definir as credenciais sob as quais as alterações no Assinante são replicadas no Publicador.

  4. No Assinante, execute sp_addpullsubscription_agent. Especifique os seguintes parâmetros:

    • @publisher, @publisher_db e @publication.

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

      ObservaçãoObservação

      As conexões realizadas com o uso da Autenticação Integrada do Windows sempre são feitas com as credenciais do Windows especificadas por @job_login e @job_password. O Distribution 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 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.

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

  5. No publicador, execute sp_addsubscriber (Transact-SQL) para registrar o Assinante no Publicador.

    No publicador, execute sp_addsubscription especificando @publication, @subscriber, @destination_db, um valor para a recepção do @subscription_type e o mesmo valor especificado na etapa 3 para @update_mode.

    Isto registra a assinatura pull no Publicador.

Para criar uma assinatura push de atualização em fila

  1. No Publicador, verifique se a publicação tem suporte para assinaturas de atualização em fila executando sp_helppublication.

  2. No Publicador, verifique se a publicação tem suporte para assinaturas push executando sp_helppublication.

    • Se o valor de allow_push no conjunto de resultados for 1, a publicação tem suporte para assinaturas push.

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

  3. No Publicador, execute sp_addsubscription. Especifique @publication, @subscriber, @destination_db e um dos valores a seguir para @update_mode:

    • queued tran - habilita a assinatura de atualização em fila.

    • failover em fila - habilita o suporte para atualização em fila com a atualização imediata como opção do failover.

      ObservaçãoObservação

      A opção failover em fila requer que a publicação também esteja habilitada para assinaturas de atualização imediata. Para failover de atualização imediata, você deve usar sp_link_publication para definir as credenciais sob as quais as alterações no Assinante são replicadas no Publicador.

  4. No Publicador, execute sp_addpushsubscription_agent. Especifique os seguintes parâmetros:

    • @subscriber, @subscriber_db e @publication.

    • As credenciais do Windows com as quais o Distribution Agent do Distribuidor é executado para @job_login e @job_password.

      ObservaçãoObservação

      As conexões realizadas com o uso da Autenticação Integrada do Windows sempre são feitas com as credenciais do Windows especificadas por @job_login e @job_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 com o Assinante usando a Autenticação Integrada do Windows.

    • (Opcional) Um valor 0 para @subscriber_security_mode e as informações de logon do SQL Server para @subscriber_login e para @subscriber_password, se for necessário usar a Autenticação SQL Server ao se conectar ao Assinante.

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

Exemplo

Este exemplo cria uma assinatura pull de atualização imediata a uma publicação que tem suporte para assinaturas de atualização imediata. 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 @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks2008R2';
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 AdventureWorks2008R2;
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'AdventureWorks2008R2Replica'; 
SET @subscriber = $(SubServer);

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