Activer les abonnements pouvant être mis à jour pour les publications transactionnelles

S’applique à : SQL Server (toutes les versions prises en charge)

Cette rubrique explique comment activer la mise à jour des abonnements pour les publications transactionnelles dans SQL Server à l’aide de SQL Server Management Studio ou Transact-SQL.

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

Avant de commencer

Sécurité

Lorsque c'est possible, demande aux utilisateurs de fournir les informations d'identification au moment de l'exécution. Si vous devez enregistrer les informations d'identification dans un fichier de script, vous devez sécuriser le fichier pour empêcher un accès non autorisé.

Utilisation de SQL Server Management Studio

Activez la mise à jour d'abonnements pour les publications transactionnelles dans la page Type de publication de l'Assistant Nouvelle publication.

Pour utiliser les abonnements mis à jour, vous devez aussi configurer des options dans l'Assistant Nouvel abonnement.

Pour activer les abonnements mis à jour

  1. Dans la page Type de publication de l'Assistant Nouvelle publication, sélectionnez Publication transactionnelle avec abonnements pouvant être mis à jour.

  2. Dans la page Sécurité de l'Agent , spécifiez des paramètres de sécurité pour l'Agent de lecture de file d'attente, en plus de l'Agent d'instantané et de l'Agent de lecture du journal. Pour plus d'informations sur les autorisations nécessaires pour le compte sour lequel s'exécute l'Agent de lecture de file d'attente, consultez Replication Agent Security Model.

    Notes

    L'Agent de lecture de file d'attente est configuré même si vous n'utilisez que des abonnements mis à jour immédiatement.

Utilisation de Transact-SQL

Lors de la création d'une publication transactionnelle par programme à l'aide de procédures stockées de réplication, vous pouvez activer les abonnements avec mise à jour immédiate ou avec mise à jour en file d'attente.

Pour créer une publication qui prend en charge les abonnements avec mise à jour immédiate

  1. Si nécessaire, créez un travail de l'Agent de lecture du journal pour la base de données de publication.

    • Si un travail de l’Agent de lecture du journal existe déjà pour la base de données de publication, passez à l’étape 2.

    • Si vous ne savez pas si un travail de l’Agent de lecture de journal existe pour une base de données publiée, exécutez sp_helplogreader_agent (Transact-SQL) sur le serveur de publication sur la base de données de publication. Si le jeu de résultats est vide, un travail de l'Agent de lecture du journal doit être créé.

    • Sur le serveur de publication, exécutez sp_addlogreader_agent (Transact-SQL). Spécifiez les informations d’identification Microsoft Windows sous lesquelles l’agent s’exécute pour @job_name et @password. Si l’agent utilise SQL Server Authentification lors de la connexion au serveur de publication, vous devez également spécifier la valeur 0 pour @publisher_security_mode et les informations de connexion microsoft SQL Server pour @publisher_login et @publisher_password.

  2. Exécutez sp_addpublication (Transact-SQL) en spécifiant une valeur true pour le paramètre @allow_sync_tran.

  3. Sur le serveur de publication, exécutez sp_addpublication_snapshot (Transact-SQL). Spécifiez le nom de publication utilisé à l’étape 2 pour @publication et les informations d’identification Windows sous lesquelles le Agent d'instantané s’exécute pour @job_name et @password. Si l’agent utilise SQL Server authentification lors de la connexion au serveur de publication, vous devez également spécifier la valeur 0 pour @publisher_security_mode et les informations de connexion SQL Server pour @publisher_login et @publisher_password. Il s'ensuit la création d'un travail de l'Agent d'instantané pour la publication.

  4. Ajoutez des articles à la publication. Pour plus d’informations, consultez définir un Article.

  5. Au niveau de l'Abonné, créez un abonnement avec mise à jour à cette publication.

Pour créer une publication qui prend en charge les abonnements avec mise à jour en file d'attente

  1. Si nécessaire, créez un travail de l'Agent de lecture du journal pour la base de données de publication.

    • Si un travail de l’Agent de lecture du journal existe déjà pour la base de données de publication, passez à l’étape 2.

    • Si vous ne savez pas si un travail de l’Agent de lecture de journal existe pour une base de données publiée, exécutez sp_helplogreader_agent (Transact-SQL) sur le serveur de publication sur la base de données de publication. Si le jeu de résultats est vide, un travail de l'Agent de lecture du journal doit être créé.

    • Sur le serveur de publication, exécutez sp_addlogreader_agent (Transact-SQL). Spécifiez les informations d’identification Windows sous lesquelles l’agent s’exécute pour @job_name et @password. Si l’agent utilise SQL Server authentification lors de la connexion au serveur de publication, vous devez également spécifier la valeur 0 pour @publisher_security_mode et les informations de connexion SQL Server pour @publisher_login et @publisher_password.

  2. Si nécessaire, créez un travail de l'Agent de lecture de la file d'attente pour le serveur de distribution.

    • Si un travail de l'Agent de lecture de la file d'attente existe déjà pour la base de données de distribution, passez à l'étape 3.

    • Si vous ne savez pas si un travail d’agent de lecture de file d’attente existe pour la base de données de distribution, exécutez sp_helpqreader_agent (Transact-SQL) sur le serveur de distribution sur la base de données de distribution. Si le jeu de résultats est vide, un travail de l'Agent de lecture de la file d'attente doit être créé.

    • Sur le serveur de distribution, exécutez sp_addqreader_agent (Transact-SQL). Spécifiez les informations d’identification Windows sous lesquelles l’agent s’exécute pour @job_name et @password. Ces informations d'identification sont utilisées lorsque l'Agent de lecture de la file d'attente se connecte au serveur de publication et à l'Abonné. Pour plus d’informations, voir Replication Agent Security Model.

  3. Exécutez sp_addpublication (Transact-SQL) en spécifiant une valeur true pour le paramètre @allow_queued_tran et une valeur de pub wins, sub reinit ou sub wins pour @conflict_policy.

  4. Sur le serveur de publication, exécutez sp_addpublication_snapshot (Transact-SQL). Spécifiez le nom de publication utilisé à l’étape 3 pour @publication et les informations d’identification Windows sous lesquelles le Agent d'instantané s’exécute pour @snapshot_job_name et @password. Si l’agent utilise SQL Server authentification lors de la connexion au serveur de publication, vous devez également spécifier la valeur 0 pour @publisher_security_mode et les informations de connexion SQL Server pour @publisher_login et @publisher_password. Il s'ensuit la création d'un travail de l'Agent d'instantané pour la publication.

  5. Ajoutez des articles à la publication. Pour plus d’informations, consultez définir un Article.

  6. Au niveau de l'Abonné, créez un abonnement avec mise à jour à cette publication.

Pour modifier la stratégie de conflit pour une publication qui autorise les abonnements avec mise à jour en file d'attente

  1. Sur la base de données de publication du serveur de publication, exécutez sp_changepublication (Transact-SQL). Spécifiez une valeur de conflict_policy pour @property et le mode de stratégie de conflit souhaité de pub wins, sub reinit ou sub wins pour @value.

Exemple (Transact-SQL)

Cet exemple crée une publication qui prend en charge les abonnements par extraction avec mise à jour immédiate et mise à jour en file d'attente.

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. 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".

--Declarations for adding a transactional publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2012'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks2012]
-- Enable transactional replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a transactional publication that supports immediate updating, 
-- queued updating, and pull subscriptions. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_sync_tran = N'true', 
    @allow_queued_tran = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true',
  -- Explicitly declare the related default properties 
    @conflict_policy = N'pub wins';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

--Declarations for adding an article.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @owner AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product'; 
SET @owner = N'Production'; 

-- Add a horizontally and vertically filtered article for the Product table.
USE [AdventureWorks2012]
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_table = @article, 
    @vertical_partition = N'false', 
    @type = N'logbased',
    @source_owner = @owner, 
    @destination_owner = @owner;
GO

Voir aussi

définir des options de résolution des conflits de mise à jour en attente (SQL Server Management Studio)
Réplication transactionnelle
Updatable Subscriptions for Transactional Replication
Créer une publication
Créer un abonnement pouvant être mis à jour pour une publication transactionnelle
Updatable Subscriptions for Transactional Replication
Utiliser sqlcmd avec des variables de script