Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico descreve como habilitar a atualização de assinaturas para publicações transacionais no SQL Server 2014 usando o SQL Server Management Studio ou o Transact-SQL.
Observação
Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em um novo trabalho de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso.
Antes de começar
Segurança
Quando possível, solicite aos usuários que insiram credenciais de segurança no runtime. Se você precisar armazenar credenciais em um arquivo de script, deverá proteger o arquivo para impedir o acesso não autorizado.
Como usar o SQL Server Management Studio.
Habilite a atualização de assinaturas 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 a atualização de assinaturas após a criação de uma publicação.
Para usar a atualização de assinaturas, você também deve configurar opções no Assistente para Nova Assinatura. Para obter mais informações, consulte Criar uma assinatura atualizável para uma publicação transacional.
Para habilitar a atualização de assinaturas
Na página Tipo de Publicação do Assistente para Nova Publicação, selecione publicação transacional com assinaturas atualizáveis.
Na página Segurança do Agente, especifique as configurações de segurança para o Agente Leitor de Fila, além do Agente de Instantâneo e do Agente Leitor de Log. Para obter mais informações sobre as permissões necessárias para a conta na qual o Queue Reader Agent é executado, consulte o Modelo de Segurança do Agente de Replicação.
Observação
O Queue Reader Agent é configurado mesmo se você usar apenas assinaturas de atualização imediata.
Usando Transact-SQL
Ao criar uma publicação transacional programaticamente usando procedimentos armazenados de replicação, você pode habilitar assinaturas de atualização imediatas ou enfileiradas.
Para criar uma publicação que dê suporte a assinaturas de atualização imediata
Se necessário, crie uma tarefa do Agente de Leitor de Log para o banco de dados de publicação.
Se já existir uma tarefa do Agente Leitor de Log para o banco de dados de publicação, vá para a etapa 2.
Se você não tiver certeza se existe um trabalho do Agente de Leitor de Log 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, uma tarefa do Agente de Leitor de Log deverá ser criada.
Na publicadora, execute sp_addlogreader_agent (Transact-SQL). Especifique as credenciais do Microsoft Windows nas quais o agente é executado para @job_name e @password. Se o agente usar a Autenticação do SQL Server 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.
Execute sp_addpublication (Transact-SQL), especificando um valor verdadeiro para o parâmetro @allow_sync_tran.
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 nas quais o Snapshot Agent é executado para @job_name e @password. Se o agente usar a Autenticação do SQL Server ao se conectar ao Publicador, você também deverá especificar um valor 0 para @publisher_security_mode e as informações de logon do SQL Server para @publisher_login e @publisher_password. Isso cria um trabalho do Snapshot Agent para a publicação.
Adicione artigos à publicação. Para obter mais informações, consulte Define an Article.
No Assinante, crie uma assinatura de atualização para esta publicação. Para obter mais informações, consulte Criar uma assinatura atualizável para uma publicação transacional.
Para criar uma publicação que dê suporte a assinaturas de atualização em fila
Se necessário, crie um trabalho do Agente de Leitor de Log para o banco de dados de publicação.
Se já existir um trabalho do Agente Leitor de Log para o banco de dados de publicação, prossiga para a etapa 2.
Se você não tiver certeza se existe uma tarefa do Agente de Leitor de Log 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, um trabalho do Agente Leitor de Logs deverá ser criado.
No publicador, execute sp_addlogreader_agent (Transact-SQL). Especifique as credenciais do Windows nas quais o agente é executado para @job_name e @password. Se o agente usar a Autenticação do SQL Server ao se conectar ao Publicador, você também deverá especificar um valor 0 para @publisher_security_mode e as informações de logon do SQL Server para @publisher_login e @publisher_password.
Se necessário, crie uma tarefa do Queue Reader Agent para o distribuidor.
Se já existir uma tarefa do Queue Reader Agent no banco de dados de distribuição, vá para a etapa 3.
Se você não tiver certeza se existe uma tarefa 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, um trabalho do Queue Reader Agent deverá ser criado.
No Distribuidor, execute sp_addqreader_agent (Transact-SQL). Especifique as credenciais do Windows nas 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.
Execute sp_addpublication (Transact-SQL), especificando um valor verdadeiro para o parâmetro @allow_queued_tran e um valor de pub wins, sub reinit ou sub wins para @conflict_policy.
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 nas quais o Snapshot Agent é executado para @snapshot_job_name e @password. Se o agente usar a Autenticação do SQL Server ao se conectar ao Publicador, você também deverá especificar um valor 0 para @publisher_security_mode e as informações de logon do SQL Server para @publisher_login e @publisher_password. Isso cria um trabalho do Snapshot Agent para a publicação.
Adicione artigos à publicação. Para obter mais informações, consulte Define an Article.
No Assinante, crie uma assinatura de atualização para esta publicação. Para obter mais informações, consulte Criar uma assinatura atualizável para uma publicação transacional.
Para alterar a política de conflito para uma publicação que permite assinaturas de atualização na fila
- No Publicador do 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 pub vence, sub reinicia ou sub vence para @value.
Exemplo (Transact-SQL)
Este exemplo cria uma publicação com suporte para assinaturas pull de atualização imediatas e enfileiradas.
-- 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 conflitos de atualização em espera (SQL Server Management Studio)
Tipos de publicação para replicação transacional
Assinaturas atualizáveis para replicação transacional
Criar uma publicação
Criar uma Assinatura Atualizável para uma Publicação Transacional
Assinaturas atualizáveis para replicação transacional
Usar sqlcmd com variáveis de script