Cómo habilitar suscripciones de actualización para publicaciones transaccionales (programación de la replicación con Transact-SQL)

Nota

Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

Al crear una publicación transaccional mediante programación con procedimientos almacenados de replicación, puede habilitar las suscripciones de actualización inmediatas o en cola.

Nota de seguridadNota de seguridad

Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales en un archivo de script, protéjalo para evitar el acceso no autorizado.

Para crear una publicación que admita suscripciones de actualización inmediatas

  1. Si es necesario, cree un trabajo del Agente de registro del LOG para la base de datos de publicación.

    • Si ya existe un trabajo del Agente de registro del LOG para la base de datos de publicación, continúe en el paso 2.

    • Si no está seguro de que exista un Agente de registro del LOG para una base de datos publicada, ejecute sp_helplogreader_agent (Transact-SQL) en la base de datos de publicación del publicador. Si el conjunto de resultados está vacío, es necesario crear un trabajo del Agente de registro del LOG.

    • En el publicador, ejecute sp_addlogreader_agent (Transact-SQL). Especifique las credenciales de Windows de Microsoft con las que se ejecuta el agente para @job_name y @password. Si el agente va a usar la autenticación de SQL Server al conectarse al publicador, también debe especificar un valor de 0 para @publisher_security_mode y la información de inicio de sesión de Microsoft SQL Server para @publisher_login y @publisher_password.

  2. Ejecute sp_addpublication (Transact-SQL), especificando un valor de true para el parámetro @allow_sync_tran.

  3. En el publicador, ejecute sp_addpublication_snapshot (Transact-SQL). Especifique el nombre de publicación usado en el paso 2 para @publication y las credenciales de Windows con las que se ejecuta el Agente de instantáneas para @job_name y @password. Si el agente va a usar la autenticación de SQL Server al conectarse al publicador, también debe especificar un valor de 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password. Esto crea un trabajo de Agente de instantáneas para la publicación.

  4. Agregue artículos a la publicación. Para obtener más información, vea Cómo definir un artículo (programación de la replicación con Transact-SQL).

  5. En el Suscriptor, cree una suscripción de actualización a esta publicación. Para obtener más información, vea Cómo crear una suscripción actualizable en una publicación transaccional (programación de la replicación con Transact-SQL).

Para crear una publicación que admita suscripciones de actualización en cola

  1. Si es necesario, cree un trabajo del Agente de registro del LOG para la base de datos de publicación.

    • Si ya existe un trabajo del Agente de registro del LOG para la base de datos de publicación, continúe en el paso 2.

    • Si no está seguro de que exista un Agente de registro del LOG para una base de datos publicada, ejecute sp_helplogreader_agent (Transact-SQL) en la base de datos de publicación del publicador. Si el conjunto de resultados está vacío, es necesario crear un trabajo de Agente de registro del LOG.

    • En el publicador, ejecute sp_addlogreader_agent (Transact-SQL). Especifique las credenciales de Windows con las que se ejecuta el agente para @job_name y @password. Si el agente va a usar la autenticación de SQL Server al conectarse al publicador, también debe especificar un valor de 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password.

  2. Si es necesario, cree un trabajo del Agente de lectura de cola para el Distribuidor.

    • Si ya existe un trabajo del Agente de lectura de cola para la base de datos de distribución, continúe con el paso 3.

    • Si no está seguro de si existe un trabajo del Agente de registro del LOG para la base de datos de distribución, ejecute sp_helpqreader_agent (Transact-SQL) en el distribuidor de la base de datos de distribución. Si el conjunto de resultados está vacío, se debe crear un trabajo del Agente de registro del LOG.

    • En el Distribuidor, ejecute sp_addqreader_agent (Transact-SQL). Especifique las credenciales de Windows con las que se ejecuta el agente para @job_name y @password. Se usan estas credenciales cuando el Agente de lectura de cola conecta con el Publicador y el Suscriptor. Para obtener más información, vea Modelo de seguridad del Agente de replicación.

  3. Ejecute sp_addpublication (Transact-SQL), especificando un valor de true para el parámetro @allow_queued_tran y un valor de pub wins, sub reinito sub wins para @conflict_policy.

  4. En el Publicador, ejecute sp_addpublication_snapshot (Transact-SQL). Especifique el nombre de publicación usado en el paso 3 para @publication y las credenciales de Windows con las que se ejecuta el Agente de instantáneas para @snapshot_job_name y @password. Si el agente va a usar la autenticación de SQL Server al conectarse al publicador, también debe especificar un valor de 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password. Esto crea un trabajo de Agente de instantáneas para la publicación.

  5. Agregue artículos a la publicación. Para obtener más información, vea Cómo definir un artículo (programación de la replicación con Transact-SQL).

  6. En el Suscriptor, cree una suscripción de actualización a esta publicación. Para obtener más información, vea Cómo crear una suscripción actualizable en una publicación transaccional (programación de la replicación con Transact-SQL).

Para cambiar la directiva de conflicto para una publicación que permita las suscripciones de actualización en cola

  • En la base de datos de publicación del publicador, ejecute sp_changepublication (Transact-SQL). Especifique un valor de conflict_policy para @property y el modo de directiva de conflicto deseado de pub wins, sub reinito sub wins para @value.

Ejemplo

Este ejemplo crea una publicación que admitía las suscripciones de extracción de actualizaciones inmediatas y en cola.

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