Habilitar suscripciones actualizables para publicaciones transaccionales

Se aplica a:SQL Server

En este tema se describe cómo habilitar las suscripciones de actualización para las publicaciones transaccionales en SQL Server mediante SQL Server Management Studio o Transact-SQL.

Nota:

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

Antes de empezar

Seguridad

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

Uso de SQL Server Management Studio

Habilite suscripciones de actualización para publicaciones transaccionales en la página Tipo de publicación del Asistente para nueva publicación.

Para utilizar suscripciones de actualización, debe configurar también opciones en el Asistente para nuevas suscripciones.

Para habilitar las suscripciones de actualización

  1. En la página Tipo de publicación del Asistente para nueva publicación, seleccione Publicación transaccional con suscripciones actualizables.

  2. En la página Seguridad del agente , especifique la configuración de seguridad para el Agente de lectura de cola, el Agente de instantáneas y el Agente de registro del LOG. Para obtener más información acerca de los permisos necesarios para la cuenta con la que se ejecuta el Agente de lectura de cola, vea Replication Agent Security Model.

    Nota:

    El Agente de lectura de cola se configura aunque solamente se utilicen suscripciones de actualización inmediata.

Usar Transact-SQL

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.

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 de Agente de registro del LOG para la base de datos de publicación, continúe al paso 2.

    • Si no está seguro de si existe un trabajo del Agente de registro del LOG para una base de datos publicada, ejecute sp_helplogreader_agent (Transact-SQL) en el publicador de la base de datos de publicación. 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 Microsoft 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 Microsoft SQL Server para @publisher_login y @publisher_password.

  2. Ejecute sp_addpublication (Transact-SQL) y especifique el valor 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 más información, consulte Define an Article.

  5. En el Suscriptor, cree una suscripción de actualización a esta publicación.

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 de Agente de registro del LOG para la base de datos de publicación, continúe al paso 2.

    • Si no está seguro de si existe un trabajo del Agente de registro del LOG para una base de datos publicada, ejecute sp_helplogreader_agent (Transact-SQL) en el publicador de la base de datos de publicación. 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 lectura de cola 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 lectura de cola.

    • 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 más información, consulte Modelo de seguridad del agente de replicación.

  3. Ejecute sp_addpublication (Transact-SQL) y especifique el valor true para el parámetro @allow_queued_tran y el valor pub wins, sub reinit o 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 más información, consulte Define an Article.

  6. En el Suscriptor, cree una suscripción de actualización a esta publicación.

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

  1. En el publicador de la base de datos de publicación, 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 (Transact-SQL)

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

Consulte también

Establecer opciones de resolución de conflictos de actualización en cola (SQL Server Management Studio)
Replicación transaccional
Updatable Subscriptions for Transactional Replication
Create a Publication (Creación de una publicación)
Create an Updatable Subscription to a Transactional Publication
Updatable Subscriptions for Transactional Replication
Usar sqlcmd con variables de script