Como habilitar a atualização de assinaturas para publicações transacionais (Programação Transact-SQL de replicação)
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. |
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.
Observação sobre segurança |
---|
Quando possível, solicite que os usuários insiram as credenciais de segurança em tempo de execução. Sendo necessário armazenar credenciais em um arquivo de script, proteja o arquivo para evitar acesso não autorizado. |
Para criar uma publicação que ofereça suporte a assinaturas de atualização imediatas
Se necessário, crie um trabalho do Log Reader Agent para o banco de dados de publicação.
Se já houver um trabalho do Log Reader Agent no banco de dados de publicação, passe para a Etapa 2.
Se você não estiver seguro quando à existência do trabalho do Log Reader Agent no banco de dados publicado, execute sp_helplogreader_agent (Transact-SQL) no Publicador do banco de dados de publicação. Se o conjunto de resultados estiver vazio, será preciso criar um trabalho do Log Reader Agent.
No Publicador, execute sp_addlogreader_agent (Transact-SQL). Especifique as credenciais do Windows Microsoft com as quais o agente executa @job_name e @password. Se o agente usar a autenticação do SQL Server ao se conectar ao Publicador, será necessário especificar também um valor de 0 para @publisher_security_mode e as informações de logon para Microsoft SQL Server**@publisher_login** e @publisher_password.
Execute sp_addpublication (Transact-SQL), especificando um valor de true para o parâmetro @allow_sync_tran.
No Publicador, execute sp_addpublication_snapshot (Transact-SQL). Especifique o nome da publicação usada na Etapa 2 para @publication e as credenciais do Windows com as 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, será preciso especificar também um valor de 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 Como definir um artigo (Programação Transact-SQL de replicação).
No Assinante, crie uma assinatura de atualização para essa publicação. Para obter mais informações, consulte Como criar uma assinatura atualizável em uma publicação transacional (Programação Transact-SQL de replicação).
Para criar uma publicação que ofereça suporte a assinaturas de atualização em fila
Se necessário, crie um trabalho do Log Reader Agent para o banco de dados de publicação.
Se já houver um trabalho do Log Reader Agent no banco de dados de publicação, passe para a Etapa 2.
Se você não estiver seguro quando à existência do trabalho do Log Reader Agent no banco de dados publicado, execute sp_helplogreader_agent (Transact-SQL) no Publicador do banco de dados de publicação. Se o conjunto de resultados estiver vazio, será preciso criar um trabalho do Log Reader Agent.
No Publicador, execute sp_addlogreader_agent (Transact-SQL). Especifique as credenciais do Windows com as quais o agente é executado para @job_name e @password. Se o agente usar a autenticação do SQL Server ao se conectar ao Publicador, será preciso especificar também um valor de 0 para @publisher_security_mode e as informações de logon do SQL Server para @publisher_login e @publisher_password.
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 estiver seguro quando à existência do trabalho do Queue Reader Agent no banco de dados da distribuição, execute sp_helpqreader_agent (Transact-SQL) no Distribuidor do 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 com 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 Modelo de segurança do agente de replicação.
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.
No Publicador, execute sp_addpublication_snapshot (Transact-SQL). Especifique o nome da publicação usada na Etapa 3 para @publication e as credenciais do Windows com as 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, será preciso especificar também um valor de 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 Como definir um artigo (Programação Transact-SQL de replicação).
No Assinante, crie uma assinatura de atualização para essa publicação. Para obter mais informações, consulte Como criar uma assinatura atualizável em uma publicação transacional (Programação Transact-SQL de replicação).
Para alterar a política de conflito para uma publicação que permite assinatura de atualização em fila
- No Publicador do banco de dados de publicação, execute sp_changepublication (Transact-SQL). Especifique um valor de conflict_policy para @property, o modo de política de conflito desejado de pub wins, sub reinit ou sub wins para @value.
Exemplo
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'AdventureWorks2008R2';
SET @publication = N'AdvWorksProductTran';
SET @login = $(Login);
SET @password = $(Password);
USE [AdventureWorks2008R2]
-- 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 [AdventureWorks2008R2]
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