Procédure : créer un abonnement pouvant être mis à jour à une publication transactionnelle (programmation Transact-SQL de la réplication)

Notes

Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

La réplication transactionnelle permet de propager sur le serveur de publication les modifications apportées au niveau d'un Abonné en utilisant des abonnements avec mise à jour immédiate ou mise à jour en file d'attente. Vous pouvez créer par programme un abonnement avec mise à jour en utilisant des procédures stockées de réplication.

Pour créer un abonnement par extraction avec mise à jour immédiate

  1. Sur le serveur de publication, vérifiez que la publication prend en charge les abonnements avec mise à jour immédiate en exécutant sp_helppublication.

  2. Sur le serveur de publication, vérifiez que la publication prend en charge les abonnements par extraction en exécutant sp_helppublication.

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

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

  3. Sur l'Abonné, exécutez sp_addpullsubscription. Spécifiez @publisher, @publication et l'une des valeurs suivantes pour @update_mode :

    • synctran - active l'abonnement pour la mise à jour immédiate.

    • failover - active l'abonnement pour la mise à jour immédiate avec mise à jour en file d'attente comme option de basculement.

      Notes

      failover requiert que la publication soit également activée pour les abonnements avec mise à jour en file d'attente.

  4. Sur l'Abonné, exécutez sp_addpullsubscription_agent. Spécifiez les éléments suivants :

    • Les 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 établies à 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 l'authentification intégrée Windows.

    • (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).

  5. Dans la base de données d'abonnement de l'Abonné, exécutez sp_link_publication. Spécifiez @publisher, @publication, le nom de la base de données de publication pour @publisher_db, et affectez l'une des valeurs suivantes à @security_mode :

    • 0 - utiliser l'authentification SQL Server lors des mises à jour sur le serveur de publication. Avec cette option, vous devez spécifier une connexion valide sur le serveur de publication pour @login et @password.

    • 1 - utiliser le contexte de sécurité de l'utilisateur qui apporte des modifications à l'Abonné lors de la connexion au serveur de publication. Consultez sp_link_publication pour connaître les restrictions en rapport avec ce mode de sécurité.

    • 2 - utiliser une connexion de serveur lié existante, définie par l'utilisateur créée à l'aide de sp_addlinkedserver.

  6. Sur le serveur de publication, exécutez sp_addsubscription, en spécifiant @publication, @subscriber, @destination_db, en affectant la valeur pull à @subscription_type et la valeur spécifiée à l'étape 3 à @update_mode.

    L'abonnement par extraction est alors inscrit sur le serveur de publication.

Pour créer un abonnement par émission de données avec mise à jour immédiate

  1. Sur le serveur de publication, vérifiez que la publication prend en charge les abonnements avec mise à jour immédiate en exécutant sp_helppublication.

  2. Sur le serveur de publication, vérifiez que la publication prend en charge les abonnements par émission de données en exécutant sp_helppublication.

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

    • Si la valeur de allow_push est 0, exécutez sp_changepublication, en spécifiant allow_push pour @property et true pour @value.

  3. Sur le serveur de publication, exécutez sp_addsubscription. Spécifiez @publication, @subscriber, @destination_db, et l'une des valeurs suivantes pour @update_mode :

    • synctran - active la prise en charge de la mise à jour immédiate.

    • failover - active la prise en charge de la mise à jour immédiate avec mise à jour en file d'attente comme option de basculement.

      Notes

      failover requiert que la publication soit également activée pour les abonnements avec mise à jour en file d'attente.

  4. Sur le serveur de publication, exécutez sp_addpushsubscription_agent. Spécifiez les paramètres suivants :

    • @subscriber, @subscriber_db et @publication.

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

      Notes

      Les connexions établies à 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 au serveur de distribution à l'aide de l'authentification intégrée Windows. Par défaut, l'agent se connecte à l'Abonné à l'aide de ces informations.

    • (Facultatif) La valeur 0 pour @subscriber_security_mode et les informations de connexion SQL Server pour @subscriber_login et @subscriber_password, si vous devez utiliser l'authentification SQL Server lors de la connexion à l'Abonné.

    • La 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).

  5. Dans la base de données d'abonnement de l'Abonné, exécutez sp_link_publication. Spécifiez @publisher, @publication, le nom de la base de données de publication pour @publisher_db et l'une des valeurs suivantes pour @security_mode :

    • 0 - utiliser l'authentification SQL Server lors des mises à jour sur le serveur de publication. Avec cette option, vous devez spécifier une connexion valide sur le serveur de publication pour @login et @password.

    • 1 - utiliser le contexte de sécurité de l'utilisateur qui apporte des modifications à l'Abonné lors de la connexion au serveur de publication. Consultez sp_link_publication pour connaître les restrictions en rapport avec ce mode de sécurité.

    • 2 - utiliser une connexion de serveur lié existante, définie par l'utilisateur créée à l'aide de sp_addlinkedserver.

Pour créer un abonnement par extraction avec mise à jour en file d'attente

  1. Sur le serveur de publication, vérifiez que la publication prend en charge les abonnements avec mise à jour en file d'attente en exécutant sp_helppublication.

  2. Sur le serveur de publication, vérifiez que la publication prend en charge les abonnements par extraction en exécutant sp_helppublication.

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

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

  3. Sur l'Abonné, exécutez sp_addpullsubscription. Spécifiez @publisher, @publication et l'une des valeurs suivantes pour @update_mode :

    • queued tran - active l'abonnement pour la mise à jour en file d'attente.

    • queued failover - active la prise en charge de la mise à jour en file d'attente avec mise à jour immédiate comme option de basculement.

      Notes

      queued failover requiert que la publication soit également activée pour les abonnements avec mise à jour immédiate. Pour basculer sur la mise à jour immédiate, vous devez utiliser sp_link_publication pour définir les informations d'identification sous lesquelles les modifications au niveau de l'Abonné sont répliquées sur le serveur de publication.

  4. Sur l'Abonné, exécutez sp_addpullsubscription_agent. Spécifiez les paramètres suivants :

    • @publisher, @publisher_db et @publication.

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

      Notes

      Les connexions établies à 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 l'authentification intégrée Windows.

    • (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.

    • 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).

  5. Sur le serveur de publication, exécutez sp_addsubscriber (Transact-SQL) pour inscrire l'Abonné au niveau du serveur de publication.

    Sur le serveur de publication, exécutez sp_addsubscription, en spécifiant @publication, @subscriber, @destination_db, en affectant la valeur pull à @subscription_type et la valeur spécifiée à l'étape 3 à @update_mode.

    L'abonnement par extraction est alors inscrit sur le serveur de publication.

Pour créer un abonnement par émission de données avec mise à jour en file d'attente

  1. Sur le serveur de publication, vérifiez que la publication prend en charge les abonnements avec mise à jour en file d'attente en exécutant sp_helppublication.

  2. Sur le serveur de publication, vérifiez que la publication prend en charge les abonnements par émission de données en exécutant sp_helppublication.

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

    • Si la valeur de allow_push est 0, exécutez sp_changepublication, en spécifiant allow_push pour @property et true pour @value.

  3. Sur le serveur de publication, exécutez sp_addsubscription. Spécifiez @publication, @subscriber, @destination_db, et l'une des valeurs suivantes pour @update_mode :

    • queued tran - active l'abonnement pour la mise à jour en file d'attente.

    • queued failover - active la prise en charge de la mise à jour en file d'attente avec mise à jour immédiate comme option de basculement.

      Notes

      queued failover requiert que la publication soit également activée pour les abonnements avec mise à jour immédiate. Pour basculer sur la mise à jour immédiate, vous devez utiliser sp_link_publication pour définir les informations d'identification sous lesquelles les modifications au niveau de l'Abonné sont répliquées sur le serveur de publication.

  4. Sur le serveur de publication, exécutez sp_addpushsubscription_agent. Spécifiez les paramètres suivants :

    • @subscriber, @subscriber_db et @publication.

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

      Notes

      Les connexions établies à 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 au serveur de distribution à l'aide de l'authentification intégrée Windows. Par défaut, l'agent se connecte à l'Abonné à l'aide de ces informations.

    • (Facultatif) La valeur 0 pour @subscriber_security_mode et les informations de connexion SQL Server pour @subscriber_login et @subscriber_password, si vous devez utiliser l'authentification SQL Server lors de la connexion à l'Abonné.

    • 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).

Exemple

Cet exemple crée un abonnement par extraction avec mise à jour immédiate à une publication qui prend en charge les abonnements avec mise à jour immédiate. 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 @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks2008R2';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription to a transactional 
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB, 
    @update_mode = N'failover', 
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription, 
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication,
    @job_login = @login,
    @job_password = @password; 

-- Add a Windows Authentication-based linked server that enables the 
-- Subscriber-side triggers to make updates at the Publisher. 
EXEC sp_link_publication 
    @publisher = @publisher, 
    @publication = @publication,
    @publisher_db = @publicationDB, 
    @security_mode = 0,
    @login = @login,
    @password = @password;
GO

USE AdventureWorks2008R2;
GO

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

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2008R2]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO