Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Este tópico descreve como permitir a atualização de subscrições para publicações transacionais no SQL Server utilizando o SQL Server Management Studio ou Transact-SQL.
Observação
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.
Segurança
Quando possível, solicite que os usuários insiram credenciais de segurança em tempo de execução. Se você precisar armazenar credenciais em um arquivo de script, deverá proteger o arquivo para impedir o acesso não autorizado.
Usando o SQL Server Management Studio
Ative a atualização de subscrições para publicações transacionais na página de Tipo de Publicação do Assistente de Novas Publicações.
Para usar a atualização de subscrições, deve também configurar opções no Assistente de Nova Subscrição.
Para permitir a atualização de subscrições
Na página de Tipo de Publicação do Assistente de Novas Publicações, selecione Publicação Transacional com subscrições atualizáveis.
Na página de Segurança do Agente, especifique as definições de segurança para o Agente Leitor de Fila, além do Snapshot Agent e do Agente Leitor de Log. Para mais informações sobre as permissões necessárias para a conta sob a qual o Agente Leitor de Fila funciona, consulte Modelo de Segurança do Agente de Replicação.
Observação
O Agente de Leitor de Fila está configurado mesmo que utilize apenas subscrições de atualização imediata.
Usando Transact-SQL
Ao criar uma publicação transacional programaticamente usando procedimentos armazenados de replicação, pode ativar subscrições de atualização imediatas ou em fila.
Criar uma publicação que suporte a atualização imediata de subscrições
Se necessário, crie um trabalho de Agente Leitor de Registo para a base de dados de publicações.
Se já existir um trabalho de Agente Leitor de Registos para a base de dados de publicações, avance para o passo 2.
Se não tiver a certeza se existe um trabalho de Agente Leitor de Registos para uma base de dados publicada, execute sp_helplogreader_agent (Transact-SQL) no Publisher na base de dados de publicação. Se o conjunto de resultados estiver vazio, deve ser criado um trabalho de Agente Leitor de Log.
Na editora, execute sp_addlogreader_agent (Transact-SQL). Especifique as credenciais Microsoft Windows sob as quais o agente corre para @job_name e @password. Se o agente utilizar a Autenticação do SQL Server ao ligar ao Publicador, deve também especificar um valor de 0 para @publisher_security_mode e as informações de início de sessão do Microsoft SQL Server para @publisher_login e @publisher_password.
Execute sp_addpublication (Transact-SQL), especificando o valor true para o parâmetro @allow_sync_tran.
No Publicador, execute sp_addpublication_snapshot (Transact-SQL). Especifique o nome da publicação usado no passo 2 para @publication e as credenciais Windows sob as quais o Snapshot Agent corre para @job_name e @password. Se o agente utilizar a Autenticação do SQL Server ao ligar-se ao Publicador, deve também especificar um valor de 0 para @publisher_security_mode e as informações de início de sessão do SQL Server para @publisher_login e @publisher_password. Isto cria um trabalho de Snapshot Agent para a publicação.
Adicione artigos à publicação. Para mais informações, consulte Definir um Artigo.
No Subscritor, crie uma subscrição de atualização desta publicação.
Para criar uma publicação que suporte subscrições de atualização em fila
Se necessário, crie um trabalho de Agente Leitor de Registo para a base de dados de publicações.
Se já existir um trabalho de Agente Leitor de Registos para a base de dados de publicações, avance para o passo 2.
Se não tiver a certeza se existe um trabalho de Agente Leitor de Registos para uma base de dados publicada, execute sp_helplogreader_agent (Transact-SQL) no Publisher na base de dados de publicação. Se o conjunto de resultados estiver vazio, então deve ser criado um trabalho de Agente Leitor de Logs.
Na editora, execute sp_addlogreader_agent (Transact-SQL). Especifique as credenciais Windows sob as quais o agente corre para @job_name e @password. Se o agente utilizar a Autenticação do SQL Server ao ligar-se ao Publicador, deve também especificar um valor de 0 para @publisher_security_mode e as informações de início de sessão do SQL Server para @publisher_login e @publisher_password.
Se necessário, crie um trabalho de Agente Leitor de Fila para o Distribuidor.
Se já existir um trabalho de Agente Leitor de Fila para a base de dados de distribuição, avance para o passo 3.
Se não tiver a certeza se existe um trabalho de Agente Leitor de Fila para a base de dados de distribuição, execute sp_helpqreader_agent (Transact-SQL) no Distribuidor na base de dados de distribuição. Se o conjunto de resultados estiver vazio, deve ser criado um trabalho de Agente Leitor de Fila.
No Distribuidor, execute o sp_addqreader_agent (Transact-SQL). Especifique as credenciais Windows sob as quais o agente corre para @job_name e @password. Estas credenciais são utilizadas quando o Agente Leitor de Filas estabelece ligação com o Publicador e o Subscritor. Para obter mais informações, consulte Replication Agent Security Model.
Execute sp_addpublication (Transact-SQL), especificando o valor true para o parâmetro @allow_queued_tran e um dos valores 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 no passo 3 para @publication e as credenciais de Windows sob as quais o Snapshot Agent corre para @snapshot_job_name e @password. Se o agente utilizar a Autenticação do SQL Server ao ligar-se ao Publicador, deve também especificar um valor de 0 para @publisher_security_mode e as informações de início de sessão do SQL Server para @publisher_login e @publisher_password. Isto cria um trabalho de Snapshot Agent para a publicação.
Adicione artigos à publicação. Para mais informações, consulte Definir um Artigo.
No Subscritor, crie uma subscrição de atualização desta publicação.
Para alterar a política de conflito de uma publicação que permite subscrições de atualização em fila de espera
- No Publicador, na base 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 pretendido de pub wins, sub reinit ou sub wins para @value.
Exemplo (Transact-SQL)
Este exemplo cria uma publicação que suporta tanto subscrições pull de atualização imediata como subscrições pull de atualização 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'AdventureWorks2022';
SET @publication = N'AdvWorksProductTran';
SET @login = $(Login);
SET @password = $(Password);
USE [AdventureWorks2022]
-- 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 [AdventureWorks2022]
EXEC sp_addarticle
@publication = @publication,
@article = @article,
@source_table = @article,
@vertical_partition = N'false',
@type = N'logbased',
@source_owner = @owner,
@destination_owner = @owner;
GO