Procédure : créer un abonnement par extraction de données (programmation Transact-SQL de réplication)

Les abonnements par extraction de données peuvent être créés par programme en utilisant des procédures stockées de réplication. Les procédures stockées utilisées dépendent du type de publication auquel l'abonnement appartient.

Pour créer un abonnement par extraction de données vers une capture instantanée ou une publication transactionnelle

  1. Sur le serveur de publication, vérifiez que la publication prend en charge tous les abonnements par extraction de données en exécutant sp_helppublication (Transact-SQL).

    • Si la valeur de allow_pull dans le jeu de résultats est 1, la publication prend en charge les abonnements par extraction de données.

    • Si la valeur de allow_pull est 0, exécutez sp_changepublication (Transact-SQL), en spécifiant allow_pull pour @property et true pour @value.

  2. Sur l'abonné, exécutez sp_addpullsubscription (Transact-SQL). Spécifiez @publisher et @publication. Pour plus d'informations sur la mise à jour des abonnements, consultez Procédure : créer un abonnement pouvant être mis à jour à une publication transactionnelle (programmation Transact-SQL de la réplication).

  3. Sur l'abonné, exécutez sp_addpullsubscription_agent (Transact-SQL). Spécifiez les informations suivantes :

    • Paramètres @publisher, @publisher_db et @publication.

    • Les informations d'identification Microsoft Windows sous lesquelles l'Agent de distribution est exécuté sur l'abonné pour @job_login et @job_password.

      Notes

      Les connexions effectuées à l'aide de l'authentification intégrée Windows utilisent toujours les informations d'identification Windows spécifiées par @job_login et @job_password. L'Agent de distribution établit toujours la connexion locale à l'Abonné à l'aide de l'authentification intégrée Windows. Par défaut, l'Agent se connecte au serveur de distribution à l'aide de ces informations.

    • (Facultatif) La valeur 0 pour @distributor_security_mode et les informations de connexion Microsoft SQL Server pour @distributor_login et @distributor_password, si vous devez utiliser l'authentification SQL Server lors de la connexion au serveur de distribution.

    • Une planification du travail de l'Agent de distribution pour cet abonnement. Pour plus d'informations, consultez Procédure : spécifier des planifications de synchronisation (programmation Transact-SQL de la réplication).

  4. Sur le serveur de publication, exécutez sp_addsubscription (Transact-SQL) pour enregistrer l'abonnement par extraction de données. Spécifiez @publication, @subscriber et @destination_db. Spécifiez la valeur pull pour @subscription_type.

Pour créer un abonnement par extraction de données vers une publication de fusion

  1. Sur le serveur de publication, vérifiez que la publication prend en charge tous les abonnements par extraction de données en exécutant sp_helpmergepublication (Transact-SQL).

    • Si la valeur de allow_pull dans le jeu de résultats est 1, la publication prend en charge les abonnements par extraction de données.

    • Si la valeur de allow_pull est 0, exécutez sp_changemergepublication (Transact-SQL), en spécifiant allow_pull pour @property et true pour @value.

  2. Sur l'abonné, exécutez sp_addmergepullsubscription (Transact-SQL). Spécifiez @publisher, @publisher_db, @publication et les paramètres suivants :

  3. Sur l'abonné, exécutez sp_addmergepullsubscription_agent (Transact-SQL). Spécifiez les paramètres suivants :

    • @publisher, @publisher_db et @publication.

    • Informations d'identification Windows sous lesquelles l'Agent de fusion est exécuté sur l'abonné pour @job_login et @job_password.

      Notes

      Les connexions effectuées à l'aide de l'authentification intégrée Windows utilisent toujours les informations d'identification Windows spécifiées par @job_login et @job_password. L'Agent de fusion crée toujours la connexion locale à l'abonné à l'aide de l'authentification intégrée Windows. Par défaut, l'Agent se connecte au serveur de distribution et au serveur de publication à l'aide de ces informations.

    • (Facultatif) La valeur 0 pour @distributor_security_mode et les informations de connexion SQL Server pour @distributor_login et @distributor_password, si vous devez utiliser l'authentification SQL Server lors de la connexion au serveur de distribution.

    • (Facultatif) La valeur 0 pour @publisher_security_mode et les informations de connexion SQL Server pour @publisher_login et @publisher_password, si vous devez utiliser l'authentification SQL Server lors de la connexion au serveur de publication.

    • Une planification du travail de l'Agent de fusion pour cet abonnement. Pour plus d'informations, consultez Procédure : spécifier des planifications de synchronisation (programmation Transact-SQL de la réplication).

  4. Sur le serveur de publication, exécutez sp_addmergesubscription (Transact-SQL). Spécifiez @publication, @subscriber, @subscriber_db et la valeur pull pour @subscription_type. Ceci enregistre l'abonnement par extraction de données.

Exemple

L'exemple suivant crée un abonnement par extraction de données vers une publication transactionnelle. Le premier traitement est exécuté sur l'abonné, et le second sur le serveur de publication. Les valeurs de connexion et le mot de passe sont fournis lors de l'exécution à l'aide des variables de script 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

L'exemple suivant crée un abonnement par extraction de données vers une publication de fusion. Le premier traitement est exécuté sur l'abonné, et le second sur le serveur de publication. Les valeurs de connexion et le mot de passe sont fournis lors de l'exécution à l'aide des variables de script 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