Cómo crear una suscripción de extracción (programación de la replicación con Transact-SQL)

Las suscripciones de extracción pueden crearse mediante programación con procedimientos almacenados de replicación. Los procedimientos almacenados que se usen dependerán del tipo de publicación a la que corresponda la suscripción.

Para crear una suscripción de extracción para una publicación de instantáneas o transaccional

  1. En el publicador, compruebe que la publicación admita suscripciones de extracción ejecutando sp_helppublication (Transact-SQL).

    • Si el valor de allow_pull en el conjunto de resultados es 1, la publicación admite las suscripciones de extracción.

    • Si el valor de allow_pull es 0, ejecute sp_changepublication (Transact-SQL), especificando allow_pull para @property y true para @value.

  2. En el suscriptor, ejecute sp_addpullsubscription (Transact-SQL). Especifique @publisher y @publication. Para obtener información sobre cómo actualizar suscripciones, vea Cómo crear una suscripción actualizable en una publicación transaccional (programación de la replicación con Transact-SQL).

  3. En el suscriptor, ejecute sp_addpullsubscription_agent (Transact-SQL). Especifique lo siguiente:

    • Los parámetros @publisher, @publisher_db y @publication.

    • Las credenciales de Microsoft Windows con las que se ejecuta el Agente de distribución en el suscriptor para @job_login y @job_password.

      Nota

      Las conexiones que se realicen con la autenticación de Windows integrada siempre usan las credenciales de Windows especificadas por @job_login y @job_password. El Agente de distribución siempre realiza la conexión local con el suscriptor mediante la autenticación de Windows integrada. De forma predeterminada, el agente se conectará con el distribuidor mediante la autenticación de Windows integrada.

    • (Opcional) El valor 0 para @distributor_security_mode y la información de inicio de sesión de Microsoft SQL Server para @distributor_login y @distributor_password, si necesita utilizar la autenticación de SQL Server al conectarse al distribuidor.

    • Una programación para el Agente de distribución de esta suscripción. Para obtener más información, vea Cómo especificar programaciones de sincronización (programación de la replicación con Transact-SQL).

  4. En el publicador, ejecute sp_addsubscription (Transact-SQL) para registrar el suscriptor en el publicador. Especifique @publication, @subscriber y @destination_db. Especifique el valor pull para @subscription_type.

Para crear una suscripción de extracción para una publicación de mezcla

  1. En el publicador, compruebe que la publicación admita suscripciones de extracción ejecutando sp_helpmergepublication (Transact-SQL).

    • Si el valor de allow_pull del conjunto de resultados es 1, la publicación admite las suscripciones de extracción.

    • Si el valor de allow_pull es 0, ejecute sp_changemergepublication (Transact-SQL), especificando allow_pull para @property y true para @value.

  2. En el suscriptor, ejecute sp_addmergepullsubscription (Transact-SQL). Especifique @publisher, @publisher_db, @publication y los parámetros siguientes:

    • @subscriber_type – especifique local para una suscripción de cliente y global para una suscripción de servidor.

    • @subscription_priority – Especifique una prioridad para la suscripción (0,00 a 99,99). Sólo es necesario para las suscripciones de servidor.

      Para obtener más información, vea Detección y resolución de conflictos de replicación de mezcla avanzada.

  3. En el suscriptor, ejecute sp_addmergepullsubscription_agent (Transact-SQL). Especifique los parámetros siguientes:

    • @publisher, @publisher_db y @publication.

    • Las credenciales de Windows con las que se ejecuta el Agente de mezcla en el suscriptor para @job_login y @job_password.

      Nota

      Las conexiones que se realicen con la autenticación de Windows integrada siempre usan las credenciales de Windows especificadas por @job_login y @job_password. El Agente de mezcla siempre realiza la conexión local con el suscriptor mediante la autenticación de Windows integrada. De forma predeterminada, el agente se conectará con el distribuidor mediante la autenticación de Windows integrada.

    • (Opcional) El valor 0 para @distributor_security_mode y la información de inicio de sesión de SQL Server para @distributor_login y @distributor_password, si necesita utilizar la autenticación de SQL Server al conectarse al distribuidor.

    • (Opcional) El valor 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password, si necesita utilizar autenticación de SQL Server al conectarse al publicador.

    • Una programación para el Agente de mezcla para la suscripción. Para obtener más información, vea Cómo especificar programaciones de sincronización (programación de la replicación con Transact-SQL).

  4. En el publicador, ejecute sp_addmergesubscription (Transact-SQL). Especifique @publication, @subscriber, @subscriber_dby el valor pull para @ subscription_type. Esto registra la suscripción de extracción.

Ejemplo

El siguiente ejemplo crea una suscripción de extracción en una publicación transaccional. El primer lote se ejecuta en el suscriptor y el segundo lote se ejecuta en el publicador. Los valores de inicio de sesión y contraseña se proporcionan en tiempo de ejecución mediante variables de scripts de sqlcmd.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2008R2';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorks2008R2Replica]
EXEC sp_addpullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2008R2Replica';

-- At the Publisher, register the subscription, using the defaults.
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'pull',
  @status = N'subscribed';
GO

El siguiente ejemplo crea una suscripción de extracción en una publicación de mezcla. El primer lote se ejecuta en el suscriptor y el segundo lote se ejecuta en el publicador. Los valores de inicio de sesión y contraseña se proporcionan en tiempo de ejecución mediante variables de scripts de sqlcmd.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2008R2';
SET @hostname = N'adventure-works\david8';

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [AdventureWorks2008R2Replica]
EXEC sp_addmergepullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription. 
EXEC sp_addmergepullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password),
  @hostname = @hostname;
GO
-- Execute this batch at the Publisher.
DECLARE @myMergePub  AS sysname;
DECLARE @mySub       AS sysname;
DECLARE @mySubDB     AS sysname;

SET @myMergePub = N'AdvWorksSalesOrdersMerge';
SET @mySub = N'MYSUBSERVER';
SET @mySubDB = N'AdventureWorks2008R2Replica';

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2008R2]
EXEC sp_addmergesubscription @publication = @myMergePub, 
@subscriber = @mySub, @subscriber_db = @mySubDB, 
@subscription_type = N'pull';
GO