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

S’applique à :SQL Server

Cette rubrique décrit comment activer la mise à jour des abonnements pour les publications transactionnelles dans SQL Server en utilisant SQL Server Management Studio ou Transact-SQL.

Remarque

Cette fonctionnalité sera supprimée dans une version future de 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.

    Remarque

    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 du journal existe pour une base de données publiée, exécutez sp_helplogreader_agent (Transact-SQL) au niveau du serveur de publication dans 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). Indiquez les identifiants Microsoft Windows sous lesquelles l'agent s'exécute pour @job_login et @job_password. Si l'agent doit utiliser l'authentification SQL Server lors de la connexion au serveur de publication, vous devez également affecter la valeur 0 à @publisher_security_mode et spécifier les informations de compte de connexion Microsoft SQL Server pour @publisher_login et @publisher_password.

  2. Exécutez sp_addpublication (Transact-SQL), en spécifiant la 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 l’Agent d’instantané s’exécute pour @job_name et @password. Si l'agent doit utiliser l'authentification SQL Server lors de la connexion au serveur de publication, vous devez également affecter la valeur 0 à @publisher_security_mode et spécifier les informations du compte 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 du journal existe pour une base de données publiée, exécutez sp_helplogreader_agent (Transact-SQL) au niveau du serveur de publication dans 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). Indiquez les informations d'identification Windows sous lesquelles l'agent s'exécute pour @job_login et @job_password. Si l'agent doit utiliser l'authentification SQL Server lors de la connexion au serveur de publication, vous devez également affecter la valeur 0 à @publisher_security_mode et spécifier les informations du compte 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 de l'Agent de lecture de la file d'attente existe pour la base de données de distribution, exécutez sp_helpqreader_agent (Transact-SQL) au niveau du serveur de distribution dans 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). Indiquez les informations d'identification Windows sous lesquelles l'agent s'exécute pour @job_login et @job_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 affectant la valeur true au paramètre @allow_queued_tran et la valeur pub wins, sub reinit ou sub wins à @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 l'Agent d'instantané s'exécute pour @snapshot_job_name et @password. Si l'agent doit utiliser l'authentification SQL Server lors de la connexion au serveur de publication, vous devez également affecter la valeur 0 à @publisher_security_mode et spécifier les informations du compte 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. Dans la base de données de publication sur le serveur de publication, exécutez sp_changepublication (Transact-SQL). Affectez la valeur conflict_policy à @property et spécifiez le mode de stratégie de conflit souhaité en choisissant parmi pub wins, sub reinitou 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'AdventureWorks2022'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks2022]
-- 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 [AdventureWorks2022]
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
Create an Updatable Subscription to a Transactional Publication
Updatable Subscriptions for Transactional Replication
Utiliser sqlcmd avec des variables de script