Partilhar via


Crie uma subscrição atualizável para uma publicação transacional

Aplica-se a:SQL Server

Observação

Esta funcionalidade continua suportada nas versões do SQL Server de 2012 a 2016. Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso.

A replicação transacional permite que as alterações feitas em um Subscritor sejam propagadas de volta ao Publicador usando subscrições imediatas ou em fila de espera. Pode criar uma subscrição de atualização de forma programática utilizando procedimentos de replicação armazenados.

Configure subscrições atualizáveis na página de Subscrições Atualizáveis do Assistente de Nova Subscrição. Esta página só está disponível se tiver ativado uma publicação transacional para subscrições atualizáveis. Para mais informações sobre como ativar subscrições atualizáveis, consulte Permitir Atualização de Subscrições para Publicações Transacionais.

Configure uma subscrição atualizável a partir do Publisher

  1. Liga-te ao Publisher no Microsoft SQL Server Management Studio e depois expande o nó do servidor.

  2. Expanda a pasta Replicação e depois expanda a pasta Publicações Locais .

  3. Clique com o botão direito numa publicação transacional ativada para atualizar subscrições e depois clique em Novas Subscrições.

  4. Siga as páginas no assistente para especificar opções para a subscrição, como, por exemplo, onde o Agente de Distribuição deve ser executado.

  5. Na página de Subscrições Atualizáveis do Assistente de Nova Subscrição, certifique-se de que Replicar está selecionado.

  6. Selecione uma opção na lista de opções Publicação no Publisher :

    • Para usar assinaturas de atualização imediata, selecione Comprometer alterações simultaneamente. Se selecionar esta opção, e a publicação permitir subscrições com atualização em fila (o padrão para publicações criadas com o Assistente de Nova Publicação), a propriedade de subscrição update_mode é definida para failover. Este modo permite-te mudar para atualizações em fila mais tarde, se necessário.

    • Para usar subscrições com atualizações em fila, selecione Alterações na fila e faça commit quando possível. Se selecionar esta opção, e a publicação permitir atualização imediata de subscrições (o padrão para publicações criadas com o Assistente de Nova Publicação), e o assinante estiver a executar SQL Server 2005 ou uma versão posterior, a propriedade de subscrição update_mode está definida para failover em modo enfileirado. Este modo permite-te mudar para atualização imediata mais tarde, se necessário.

    Para informações sobre a troca de modos de atualização, consulte Alternar entre Modos de Atualização para uma Subscrição Transacional Atualizável.

  7. A Página de Login de Subscrições Atualizáveis é exibida para subscrições que utilizam atualização imediata ou que têm modo_de_atualização configurado para transferência em fila. Na página Login para Subscrições Atualizáveis , especifique um servidor ligado através do qual são feitas ligações ao Publisher para atualização imediata das subscrições. As ligações são usadas pelos gatilhos que disparam contra o Assinante e propagam alterações para o Editor. Selecione uma das seguintes opções:

    • Crie um servidor ligado que se ligue usando Autenticação SQL Server. Selecione esta opção se ainda não tiver definido um servidor remoto ou servidor ligado entre o Assinante e o Publicador. A replicação cria um servidor vinculado para si. A conta que especificaste já deve existir no Publicador.

    • Use um servidor ligado ou servidor remoto que já tenha definido. Selecione esta opção se tiver definido um servidor remoto ou um servidor ligado entre o Assinante e o Publisher usando sp_addserver (Transact-SQL),sp_addlinkedserver (Transact-SQL), SQL Server Management Studio ou outro método.

    Para informações sobre as permissões exigidas pela conta do servidor ligado, consulte as Subscrições de Atualização em Fila de Secure the Subscriber.

  8. Conclua o assistente.

Configure uma subscrição atualizável pelo Assinante

  1. Liga-te ao Assinante no SQL Server Management Studio e, em seguida, expande o nó do servidor.

  2. Expande a pasta de Replicação .

  3. Clique com o botão direito na pasta Local Subscriptions e depois clique em Novas Subscrições.

  4. Na página de Publicação do Assistente de Subscrição Nova, selecione Encontrar Publicador SQL Server na lista suspensa de Publicadores.

  5. Liga-te ao Publisher na caixa de diálogo Ligar ao Servidor .

  6. Selecione uma publicação transacional ativada para atualização de subscrições na página de Publicação .

  7. Siga as etapas no assistente para especificar opções para a subscrição, como onde deve ser executado o Agente de Distribuição.

  8. Na página de Subscrições Atualizáveis do Assistente de Nova Subscrição, certifique-se de que Replicar está selecionado.

  9. Selecione uma opção na lista suspensa Commit no Publisher:

    • Para utilizar subscrições de atualização imediata, selecione Comprometer alterações simultaneamente. Se selecionar esta opção, e a publicação permitir subscrições de atualização em fila (o padrão para publicações criadas com o Assistente de Nova Publicação), a propriedade de subscrição update_mode é definida para failover. Este modo permite-te mudar para atualizações em fila mais tarde, se necessário.

    • Para usar subscrições de atualização em fila, selecione Alterações na fila e efetue o commit quando possível. Se selecionar esta opção, e se a publicação permitir a atualização imediata das subscrições (que é o padrão para publicações criadas com o Assistente de Nova Publicação), e se o Subscritor estiver a executar o SQL Server 2005 ou uma versão posterior, a propriedade de subscrição update_mode é configurada para queued failover. Este modo permite-te mudar para atualização imediata mais tarde, se necessário.

    Para informações sobre a troca de modos de atualização, consulte Alternar entre Modos de Atualização para uma Subscrição Transacional Atualizável.

  10. A página de Login para Subscrições Atualizáveis é exibida para subscrições que utilizam atualização imediata ou que têm update_mode configuradas para failover em fila. Na página Login para Subscrições Atualizáveis , especifique um servidor ligado através do qual são feitas ligações ao Publisher para atualização imediata das subscrições. As ligações são usadas pelos gatilhos que disparam contra o Assinante e propagam alterações para o Editor. Selecione uma das seguintes opções:

    • Crie um servidor ligado que se ligue usando Autenticação SQL Server. Selecione esta opção se ainda não tiver definido um servidor remoto ou servidor ligado entre o Assinante e o Publicador. A replicação cria um servidor ligado para si. A conta que especificar já deve existir no Publicador.

    • Use um servidor ligado ou servidor remoto que já tenha definido. Selecione esta opção se tiver definido um servidor remoto ou um servidor ligado entre o Assinante e o Publisher usando sp_addserver (Transact-SQL),sp_addlinkedserver (Transact-SQL), SQL Server Management Studio ou outro método.

    Para informações sobre as permissões exigidas pela conta do servidor ligado, consulte as Subscrições de Atualização em Fila de Secure the Subscriber.

  11. Conclua o assistente.

Crie uma subscrição pull de atualização imediata

  1. No Publicador, verifique se a publicação suporta a atualização imediata de subscrições executando sp_helppublication.

    • Se o valor de allow_sync_tran no conjunto de resultados for 1, a publicação suporta subscrições de atualização imediata.
    • Se o valor de allow_sync_tran no conjunto de resultados for 0, a publicação deve ser recriada com as subscrições de atualização imediata ativadas.
  2. No Editor, verifique se a publicação suporta subscrições pull, executando sp_helppublication.

    • Se o valor de allow_pull no conjunto de resultados for 1, a publicação suporta subscrições puxadas.
    • 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 seguintes valores para @update_mode:

    • sync tran - permite a subscrição para atualização imediata.
    • failover - Permite a subscrição para atualização imediata com a atualização em fila como opção de failover.

    Observação

    failover requer que a publicação também esteja habilitada para subscrições 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 Microsoft Windows sob as quais o Agente de Distribuição do Assinante corre para @job_login e @job_password.

    Observação

    As ligações feitas usando a Autenticação Integrada do Windows são sempre feitas usando as credenciais do Windows especificadas por @job_login e @job_password. O Agente de Distribuição faz sempre a ligação local ao Assinante usando a Autenticação Integrada do Windows. Por defeito, o agente liga-se ao Distribuidor através da Autenticação Integrada do Windows.

    • (Opcional) Um valor de 0 para @distributor_security_mode e a informação de login do Microsoft SQL Server para @distributor_login e @distributor_password, se precisar de usar Autenticação SQL Server ao ligar-se ao Distribuidor.
    • Um calendário para o trabalho de Agente de Distribuição para esta subscrição.
  5. No Assinante na base de dados de subscrição, execute sp_link_publication. Especifique @publisher, @publication, o nome da base de dados de publicações para @publisher_db, e um dos seguintes valores para @security_mode:

    • 0 - Utilizar Autenticação SQL Server ao fazer atualizações no Publisher. Esta opção exige que especifique um login válido no Publisher para @login e @password.
    • 1 - Utilizar o contexto de segurança do utilizador que está a efetuar mudanças no Assinante ao conectar-se ao Publicador. Consulte sp_link_publication para restrições relacionadas com este modo de segurança.
    • 2 - Utilizar um login de servidor ligado existente, definido pelo utilizador, criado usando sp_addlinkedserver.
  6. No publicador, execute sp_addsubscription especificando @publication, @subscriber, @destination_db, um valor de pull para @subscription_type, e o mesmo valor especificado na etapa 3 para @update_mode. Isto regista a subscrição pull no Publisher.

Crie uma subscrição push de atualização imediata

  1. No Publicador, verifique se a publicação suporta a atualização imediata de subscrições executando sp_helppublication.

    • Se o valor de allow_sync_tran no conjunto de resultados for 1, a publicação suporta subscrições de atualização imediata.
    • Se o valor de allow_sync_tran no conjunto de resultados for 0, a publicação deve ser recriada com as subscrições de atualização imediata ativadas.
  2. No Publicador, certifique-se de que a publicação suporta subscrições push executando sp_helppublication.

    • Se o valor de allow_push no conjunto de resultados for 1, a publicação suporta subscrições push.
    • Se o valor de allow_push for 0, execute sp_changepublication, especificando allow_push para @property e true para @value.
  3. No Editor (Publisher), execute sp_addsubscription. Especifique @publication, @subscriber, @destination_db, e um dos seguintes valores para @update_mode:

    • sync tran - permite suporte para atualização imediata.
    • failover - permite o suporte para atualização imediata, com a atualização em fila como opção de failover.

    Observação

    failover requer que a publicação também esteja ativada para subscrições atualizadas em fila.

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

    • @subscriber, @subscriber_db, e @publication.

    • As credenciais do Windows sob as quais funciona o Agente de Distribuição no Distribuidor para @job_login e @job_password.

    Observação

    As ligações feitas usando a Autenticação Integrada do Windows são sempre feitas usando as credenciais do Windows especificadas por @job_login e @job_password. O Agente de Distribuição faz sempre a ligação local ao Distribuidor usando a Autenticação Integrada do Windows. Por padrão, o agente irá ligar-se ao Assinante através da Autenticação Integrada do Windows.

    • (Opcional) Um valor de 0 para @subscriber_security_mode e a informação de login do SQL Server para @subscriber_login e @subscriber_password, se precisar de usar Autenticação SQL Server ao conectar-se ao Subscriber.
    • Um calendário para o trabalho de Agente de Distribuição para esta subscrição.
  5. No Assinante na base de dados de subscrição, execute sp_link_publication. Especifique @publisher, @publication, o nome da base de dados de publicações para @publisher_db, e um dos seguintes valores para @security_mode:

    • 0 - Utilizar Autenticação SQL Server ao fazer atualizações no Publisher. Esta opção exige que especifique um login válido no Publisher para @login e @password.
    • 1 - Utilize o contexto de segurança do utilizador que faz alterações no assinante ao ligar-se ao publicador. Consulte sp_link_publication para restrições relacionadas com este modo de segurança.
    • 2 - Utilizar um login de servidor ligado existente, definido pelo utilizador, criado usando sp_addlinkedserver.

Crie uma assinatura pull de atualização em espera

  1. No Publisher, verifique executando sp_helppublication se a publicação suporta subscrições de atualização em fila.

    • Se o valor de allow_queued_tran no conjunto de resultados for 1, a publicação suporta subscrições de atualização imediata.
    • Se o valor de allow_queued_tran no conjunto de resultados for 0, a publicação deve ser recriada com as subscrições de atualização em fila ativadas.
  2. No Publicador, verifique se a publicação suporta subscrições pull ao executar sp_helppublication.

    • Se o valor de allow_pull no conjunto de resultados for 1, a publicação suporta subscrições puxadas.
    • Se o valor de allow_pull for 0, execute sp_changepublication, especificando allow_pull para @property e true para @value.
  3. No lado do Assinante, execute sp_addpullsubscription. Especifique @publisher e @publication, e um dos seguintes valores para @update_mode:

    • queued tran - permite a subscrição para atualizações em fila de espera.
    • queued failover - Permite suporte para atualização em fila, com a atualização imediata como opção de recurso de emergência.

    Observação

    queued failover exige que a publicação também esteja ativada para atualização imediata das subscrições. Para alternar para a atualização imediata, deve usar sp_link_publication para definir as credenciais sob as quais as alterações no Assinante são replicadas para o Editor.

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

    • @publisher, @publisher_db, e @publication.
    • As credenciais do Windows sob as quais o Agente de Distribuição do Assinante corre para @job_login e @job_password.

    Observação

    As ligações feitas usando a Autenticação Integrada do Windows são sempre feitas usando as credenciais do Windows especificadas por @job_login e @job_password. O Agente de Distribuição faz sempre a ligação local ao Assinante usando a Autenticação Integrada do Windows. Por defeito, o agente liga-se ao Distribuidor através da Autenticação Integrada do Windows.

    • (Opcional) Um valor de 0 para @distributor_security_mode e a informação de login do SQL Server para @distributor_login e @distributor_password, se precisar de usar Autenticação SQL Server ao ligar-se ao Distribuidor.
    • Um calendário para o trabalho de Agente de Distribuição para esta subscrição.
  5. No editor, execute sp_addsubscriber para registar o Assinante no Editor, especificando @publication, @subscriber, @destination_db, um valor de pull para @subscription_type, e o mesmo valor especificado no passo 3 para @update_mode. Isto regista a subscrição pull no Publisher.

Crie uma assinatura push de atualização enfileirada

  1. No Publisher, verifique se a publicação suporta subscrições de atualização em fila executando sp_helppublication.

    • Se o valor de allow_queued_tran no conjunto de resultados for 1, a publicação suporta subscrições com atualização imediata.
    • Se o valor de allow_queued_tran no conjunto de resultados for 0, a publicação deve ser recriada com as subscrições de atualização em fila ativadas. Para mais informações, veja Como: Permitir a atualização de subscrições para publicações transacionais (Programação Transact-SQL de replicação).
  2. No Distribuidor, verifique se a publicação suporta subscrições push executando sp_helppublication.

    • Se o valor de allow_push no conjunto de resultados for 1, a publicação suporta subscrições 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 seguintes valores para @update_mode:

    • queued tran - permite a subscrição para atualizações em espera.
    • queued failover - Permite suporte para atualização em fila com atualização imediata como opção de contingência.

    Observação

    A opção de failover em fila exige que a publicação também esteja ativada para atualização imediata das subscrições. Para passar para a atualização imediata, deve usar sp_link_publication para definir as credenciais sob as quais as alterações no Subscritor são replicadas para o Publicador.

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

    • @subscriber, @subscriber_db, e @publication.
    • As credenciais Windows com as quais o Agente de Distribuição no Distribuidor funciona para @job_login e @job_password.

    Observação

    As ligações feitas usando a Autenticação Integrada do Windows são sempre feitas usando as credenciais do Windows especificadas por @job_login e @job_password. O Agente de Distribuição faz sempre a ligação local ao Distribuidor usando a Autenticação Integrada do Windows. Por padrão, o agente liga-se ao Assinante utilizando a Autenticação Integrada do Windows.

    • (Opcional) Um valor de 0 para @subscriber_security_mode e a informação de login do SQL Server para @subscriber_login e @subscriber_password, se precisar de usar a autenticação SQL Server ao ligar-se ao Subscritor.
    • Um calendário para o trabalho de Agente de Distribuição para esta subscrição.

Definir opções de resolução de conflitos atualizadas em fila

Defina opções de resolução de conflitos para publicações que suportem subscrições atualizadas em fila na página de Opções de Subscrição da caixa de diálogo Propriedades de Publicação - <Publicação> . Para mais informações sobre como aceder a esta caixa de diálogo, consulte Visualizar e Modificar Propriedades de Publicação.

  1. Na página de Opções de Subscrição da caixa de diálogo Propriedades de Publicação - <Publicação> , selecione um dos seguintes valores para a opção de política de Resolução de Conflitos :

    • Mantenha a alteração do Publisher
    • Mantenha a alteração do Assinante
    • Reiniciar a subscrição

Example

Este exemplo cria uma subscrição pull com atualização imediata para uma publicação que suporta subscrições com atualização imediata. Os valores de login e palavra-passe são fornecidos em tempo de execução usando variáveis de scripting sqlcmd.

Observação

Este script utiliza as variáveis de scripting do sqlcmd. Estão na forma $(MyVariable). Para informações sobre como usar variáveis de scripting na linha de comandos e no SQL Server Management Studio, consulte a secção Executando Scripts de Replicação no tópico Conceitos de Procedimentos Armazenados de Sistema de Replicação.

-- 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'AdventureWorks2022';
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 AdventureWorks2022;
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'AdventureWorks2022Replica';
SET @subscriber = $(SubServer);

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