Partilhar via


Habilitar atualização de assinaturas para publicações transacionais

Este tópico descreve como habilitar a atualização de assinaturas para publicações transacionais no SQL Server 2014 usando SQL Server Management Studio ou Transact-SQL.

Observaçã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.

Antes de começar

Segurança

Quando possível, solicite que os usuários insiram as credenciais de segurança em tempo de execução. Se for necessário armazenar credenciais em um arquivo de script, você deverá proteger o arquivo para impedir acesso não autorizado.

Como usar o SQL Server Management Studio.

Habilite as assinaturas de atualização para publicações transacionais na página Tipo de Publicação do Assistente para Nova Publicação. Para obter mais informações sobre como usar esse assistente, consulte Criar uma publicação. Você não pode habilitar assinaturas de atualização após uma publicação ter sido criada.

Para usar assinaturas de atualização, você deve configurar também as opções no Assistente para Nova Assinatura. Para obter mais informações, consulte Criar uma assinatura atualizável em uma publicação transacional

Para habilitar assinaturas de atualização

  1. Na página Tipo de Publicação do Assistente para Nova Publicação, selecione Publicação transacional com assinaturas atualizáveis.

  2. Na página Segurança do Agente , especifique as definições do Queue Reader Agent além de Snapshot Agent e Log Reader Agent. Para obter mais informações sobre as permissões que são exigidas para a conta sob a qual o Queue Reader Agent executa, consulte Replication Agent Security Model.

    Observação

    O Agente de Leitor de Fila será configurado mesmo se você usar apenas a assinatura de atualização imediata.

Usando o Transact-SQL

Ao criar uma publicação transacional de forma programática usando procedimentos armazenados de replicação, é possível ativar tanto as assinaturas de atualização imediatas como em fila.

Para criar uma publicação que ofereça suporte a assinaturas de atualização imediatas

  1. Se necessário, crie um trabalho do Log Reader Agent para o banco de dados de publicação.

    • Se já existir um trabalho do Agente de Leitor de Log para o banco de dados de publicação, passe para a etapa 2.

    • Se você não tiver certeza se existe um trabalho do Log Reader Agent para um banco de dados publicado, execute sp_helplogreader_agent (Transact-SQL) no Publicador no banco de dados de publicação. Se o conjunto de resultados estiver vazio, será preciso criar um trabalho do Log Reader Agent.

    • No editor, execute sp_addlogreader_agent (Transact-SQL). Especifique as credenciais do Microsoft Windows sob as quais o agente é executado para @job_name e @password. Se o agente usar SQL Server Autenticação ao se conectar ao Publicador, você também deverá especificar um valor 0 para @publisher_security_mode e as informações de logon do Microsoft SQL Server para @publisher_login e @publisher_password.

  2. Execute sp_addpublication (Transact-SQL), especificando um valor de true para o parâmetro @allow_sync_tran.

  3. No Publicador, execute sp_addpublication_snapshot (Transact-SQL). Especifique o nome da publicação usado na etapa 2 para @publication e as credenciais do Windows sob as quais o Agente de Instantâneo é executado para @job_name e @password. Se o agente usar SQL Server Autenticação ao se conectar ao Publicador, você também deverá especificar um valor 0 para @publisher_security_mode e as informações de logon SQL Server para @publisher_login e @publisher_password. Isso cria um trabalho do Agente de Instantâneo para a publicação.

  4. Adicione artigos à publicação. Para obter mais informações, consulte Define an Article.

  5. No Assinante, crie uma assinatura de atualização para essa publicação. Para obter mais informações, consulte Criar uma assinatura atualizável em uma publicação transacional

Para criar uma publicação que ofereça suporte a assinaturas de atualização em fila

  1. Se necessário, crie um trabalho do Log Reader Agent para o banco de dados de publicação.

    • Se já existir um trabalho do Agente de Leitor de Log para o banco de dados de publicação, passe para a etapa 2.

    • Se você não tiver certeza se existe um trabalho do Log Reader Agent para um banco de dados publicado, execute sp_helplogreader_agent (Transact-SQL) no Publicador no banco de dados de publicação. Se o conjunto de resultados estiver vazio, será preciso criar um trabalho do Log Reader Agent.

    • No editor, execute sp_addlogreader_agent (Transact-SQL). Especifique as credenciais do Windows sob as quais o agente é executado para @job_name e @password. Se o agente usar SQL Server Autenticação ao se conectar ao Publicador, você também deverá especificar um valor 0 para @publisher_security_mode e as informações de logon SQL Server para @publisher_login e @publisher_password.

  2. Se necessário, crie um trabalho do Queue Reader Agent para o Distribuidor.

    • Se já houver um trabalho do Queue Reader Agent para o banco de dados da distribuição, passe para a Etapa 3.

    • Se você não tiver certeza se existe um trabalho do Queue Reader Agent para o banco de dados de distribuição, execute sp_helpqreader_agent (Transact-SQL) no Distribuidor no banco de dados de distribuição. Se o conjunto de resultados estiver vazio, será preciso criar um trabalho do Queue Reader Agent.

    • No Distribuidor, execute sp_addqreader_agent (Transact-SQL). Especifique as credenciais do Windows sob as quais o agente é executado para @job_name e @password. Essas credenciais são usadas quando o Queue Reader Agent se conecta ao Publicador e ao Assinante. Para obter mais informações, consulte Replication Agent Security Model.

  3. Execute sp_addpublication (Transact-SQL), especificando um valor de true para o parâmetro @allow_queued_tran e um valor de pub wins, sub reinit ou sub wins para @conflict_policy.

  4. No Publicador, execute sp_addpublication_snapshot (Transact-SQL). Especifique o nome da publicação usado na etapa 3 para @publication e as credenciais do Windows sob as quais o Agente de Instantâneo é executado para @snapshot_job_name e @password. Se o agente usar SQL Server Autenticação ao se conectar ao Publicador, você também deverá especificar um valor 0 para @publisher_security_mode e as informações de logon SQL Server para @publisher_login e @publisher_password. Isso cria um trabalho do Agente de Instantâneo para a publicação.

  5. Adicione artigos à publicação. Para obter mais informações, consulte Define an Article.

  6. No Assinante, crie uma assinatura de atualização para essa publicação. Para obter mais informações, consulte Criar uma assinatura atualizável em uma publicação transacional

Para alterar a política de conflito para uma publicação que permite assinatura de atualização em fila

  1. No Publicador no banco de dados de publicação, execute sp_changepublication (Transact-SQL). Especifique um valor de conflict_policy para @property e o modo de política de conflito desejado de ganhos de pub, sub reinit ou sub wins para @value.

Exemplo (Transact-SQL)

Esse exemplo cria uma publicação que oferece suporte às assinaturas pull imediatas e em fila.

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. 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".

--Declarations for adding a transactional publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2012'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks]
-- Enable transactional replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a transactional publication that supports immediate updating, 
-- queued updating, and pull subscriptions. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_sync_tran = N'true', 
    @allow_queued_tran = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true',
  -- Explicitly declare the related default properties 
    @conflict_policy = N'pub wins';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

--Declarations for adding an article.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @owner AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product'; 
SET @owner = N'Production'; 

-- Add a horizontally and vertically filtered article for the Product table.
USE [AdventureWorks2012]
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_table = @article, 
    @vertical_partition = N'false', 
    @type = N'logbased',
    @source_owner = @owner, 
    @destination_owner = @owner;
GO

Consulte Também

Definir opções de resolução de conflito de atualização na fila (SQL Server Management Studio)
Tipos de publicação para a Replicação Transacional
Updatable Subscriptions for Transactional Replication
Criar uma publicação
Criar uma assinatura atualizável em uma publicação transacional
Updatable Subscriptions for Transactional Replication
Usar sqlcmd com variáveis de script