Como habilitar a atualização de assinaturas para publicações transacionais (Programação Transact-SQL de replicação)

ObservaçãoObservaçã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çaObservaçã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

  1. 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.

  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 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.

  4. Adicione artigos à publicação. Para obter mais informações, consulte Como definir um artigo (Programação Transact-SQL de replicação).

  5. 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

  1. 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.

  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 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.

  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 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.

  5. Adicione artigos à publicação. Para obter mais informações, consulte Como definir um artigo (Programação Transact-SQL de replicação).

  6. 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