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 How to: Create an Updatable Subscription to a Transactional Publication (Replication Transact-SQL Programming).

  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.
      ms147346.note(fr-fr,SQL.90).gifRemarque :
      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 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 à l'aide de ces informations.
    • (Facultatif) Value 0 pour @distributor_security_mode et informations de connexion Microsoft SQL Server pour @distributor_login et @distributor_password, si vous devez utiliser l'authentification SQL 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 How to: Specify Synchronization Schedules (Replication Transact-SQL Programming).
  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.
      ms147346.note(fr-fr,SQL.90).gifRemarque :
      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) Valeur 0 pour @distributor_security_mode et informations de connexion SQL Server pour @distributor_login et @distributor_password, si vous devez utiliser l'authentification SQL lors de la connexion au serveur de distribution.
    • (Facultatif) Valeur 0 pour @publisher_security_mode et informations de connexion SQL Server pour @publisher_login et @publisher_password, si vous devez utiliser l'authentification SQL lors de la connexion au serveur de publication.
    • Une planification du travail de l'Agent de fusion pour cet abonnement. Pour plus d'informations, voir How to: Specify Synchronization Schedules (Replication Transact-SQL Programming).
  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 lot 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'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

L'exemple suivant crée un abonnement par extraction de données vers une publication de fusion. Le premier lot 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'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

Voir aussi

Tâches

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

Autres ressources

How to: Create a Publication (Replication Transact-SQL Programming)
How to: Delete a Pull Subscription (Replication Transact-SQL Programming)
Abonnement à des publications
Utilisation de sqlcmd avec des variables de script

Aide et Informations

Assistance sur SQL Server 2005