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

Las suscripciones de extracción se pueden crear mediante programación usando los procedimientos almacenados de réplica. Los procedimientos almacenados utilizados dependerán del tipo de publicación al que pertenece 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 permite el uso de 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 permite el uso de 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 acerca del modo de actualizar suscripciones, vea How to: Create an Updatable Subscription to a Transactional Publication (Replication Transact-SQL Programming).

  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 realizadas con la autenticación de Windows integrada siempre utilizan las credenciales de Windows especificadas por @job_login y @job_password. El Agente de distribución siempre realiza las conexiones locales al suscriptor mediante la autenticación de Windows integrada. De forma predeterminada, el agente se conectará al distribuidor utilizando 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 usar la Autenticación de SQL al conectarse al distribuidor.

    • Un programa para el trabajo del Agente de distribución para esta suscripción. Para obtener más información, vea How to: Specify Synchronization Schedules (Replication Transact-SQL Programming).

  4. En el publicador, ejecute sp_addsubscription (Transact-SQL) para registrar la suscripción de extracción. 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 permite el uso de suscripciones de extracción ejecutando sp_helpmergepublication (Transact-SQL).

    • Si el valor de allow_pull en el conjunto de resultados es 1, la publicación permite el uso de 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 siguientes parámetros:

    • @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 (de 0.00 a 99.99). Sólo es necesario para una suscripción de servidor.
      Para obtener más información, vea Detección y resolución de conflictos de réplica de mezcla avanzada.
  3. En el suscriptor, ejecute sp_addmergepullsubscription_agent (Transact-SQL). Especifique los siguientes parámetros:

    • @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 realizadas con la autenticación de Windows integrada siempre utilizan las credenciales de Windows especificadas por @job_login y @job_password. El Agente de mezcla siempre realiza las conexiones locales al suscriptor mediante la autenticación de Windows integrada. De forma predeterminada, el agente se conectará al distribuidor y al publicador utilizando 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 usar la Autenticación de SQL 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 usar la Autenticación de SQL al conectarse al publicador.

    • Un programa para el trabajo del Agente de mezcla para esta suscripción. Para obtener más información, vea How to: Specify Synchronization Schedules (Replication Transact-SQL Programming).

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

Ejemplo

En el siguiente ejemplo se crea una suscripción de extracción para una publicación transaccional. El primer lote se ejecuta en el suscriptor y el segundo en el publicador. Los valores de inicio de sesión y contraseña se suministran en tiempo de ejecución mediante las variables de secuencia de comandos 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'AdventureWorks';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorksReplica]
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'AdventureWorksReplica';

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

En el siguiente ejemplo se crea una suscripción de extracción para una publicación de mezcla. El primer lote se ejecuta en el suscriptor y el segundo en el publicador. Los valores de inicio de sesión y contraseña se suministran en tiempo de ejecución mediante las variables de secuencia de comandos 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'AdventureWorks';
SET @hostname = N'adventure-works\david8';

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [AdventureWorksReplica]
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'AdventureWorksReplica';

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

Vea también

Tareas

Cómo crear una suscripción de extracción (programación RMO)
Cómo crear una suscripción de inserción (programación de la réplica con Transact-SQL)

Otros recursos

How to: Create a Publication (Replication Transact-SQL Programming)
How to: Delete a Pull Subscription (Replication Transact-SQL Programming)
Suscribirse a publicaciones
Usar sqlcmd con variables de secuencia de comandos

Ayuda e información

Obtener ayuda sobre SQL Server 2005