Compartir a través de


Habilitar suscripciones de actualización para publicaciones transaccionales

En este tema se describe cómo habilitar la actualización de suscripciones para publicaciones transaccionales en SQL Server 2014 mediante SQL Server Management Studio o 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.

Antes de empezar

Seguridad

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

Uso de SQL Server Management Studio

Habilite la actualización de suscripciones para publicaciones transaccionales en la página Tipo de publicación del Asistente para nueva publicación. Para obtener más información sobre el uso de este asistente, vea Crear una publicación. No se pueden habilitar las suscripciones de actualización después de crear una publicación.

Para usar suscripciones de actualización, también debe configurar las opciones en el Asistente para suscripciones nuevas. Para obtener más información, vea Crear una suscripción actualizable a una publicación transaccional.

Para habilitar la actualización de suscripciones

  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, además del Agente de instantáneas y del Agente de lectura de registros. Para obtener más información sobre los permisos necesarios para la cuenta en la que se ejecuta el Agente de lectura de cola, vea Modelo de seguridad del agente de replicación.

    Nota:

    El Agente de lectura de cola está configurado aunque solo se utilicen suscripciones de actualización inmediata.

Uso de Transact-SQL

Al crear una publicación transaccional programáticamente usando procedimientos almacenados de replicación, puede habilitar suscripciones de actualización en cola o inmediatas.

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

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

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

    • Si no está seguro de si existe un trabajo del Agente lector de registros para una base de datos publicada, ejecute sp_helplogreader_agent (Transact-SQL) en el servidor publicador de la base de datos de la publicación. Si el conjunto de resultados está vacío, debe crearse una tarea del Agente lector de registros.

    • 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 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 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 en las que se ejecuta el Agente de instantáneas para @job_name y @password. Si el agente 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 obtener más información, vea Crear una suscripción actualizable a una publicación transaccional.

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 Reader para la base de datos de publicación.

    • Si ya existe una tarea del Agente lector del registro para la base de datos de publicación, continúe con el paso 2.

    • Si no está seguro de si existe un trabajo del Agente de Log Reader para una base de datos publicada, ejecute sp_helplogreader_agent (Transact-SQL) en el publicador de la base de datos de la publicación. Si el conjunto de resultados está vacío, se debe crear un trabajo del agente lector de registros.

    • 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 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 del lector de colas 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 una tarea del agente lector 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. Estas credenciales se usan cuando el Agente de lectura de cola se conecta al publicador y al suscriptor. Para obtener más información, consulte 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 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 en las que se ejecuta el Agente de instantáneas para @snapshot_job_name y @password. Si el agente 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 genera una tarea para el 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 sistema suscriptor, cree una suscripción actualizada a esta publicación. Para obtener más información, vea Crear una suscripción actualizable a una publicación transaccional.

Para cambiar la política de conflictos de una publicación que permite suscripciones de actualización en cola

  1. 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 reinit o sub wins para @value.

Ejemplo (Transact-SQL)

En este ejemplo se crea una publicación que admite suscripciones de obtención inmediatas y en espera.

-- 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'AdventureWorks2012'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks]
-- 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 [AdventureWorks2012]
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_table = @article, 
    @vertical_partition = N'false', 
    @type = N'logbased',
    @source_owner = @owner, 
    @destination_owner = @owner;
GO

Véase también

Establecer opciones de resolución de conflictos de actualización en cola (SQL Server Management Studio)
Tipos de publicación para la replicación transaccional
Suscripciones actualizables para la replicación transaccional
Create a Publication (Creación de una publicación)
Crear una Suscripción Actualizable a una Publicación Transaccional
Suscripciones actualizables para la replicación transaccional
Usar sqlcmd con variables de script