Procédure : activer les abonnements avec mise à jour pour les publications transactionnelles (programmation Transact-SQL de la réplication)

[!REMARQUE]

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

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.

Remarque relative à la sécuritéRemarque relative à la sécurité

Si possible, demandez aux utilisateurs de fournir les informations d'identification de sécurité au moment de l'exécution. Si vous devez stocker ces informations dans un fichier de script, vous devez sécuriser ce fichier pour empêcher tout accès non autorisé.

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 informations d'identification Microsoft Windows sous lesquelles l'agent s'exécute pour @job_login et @job_password. Si l'agent utilise 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 connexion MicrosoftSQL Server pour @publisher_login et @publisher_password.

  2. Exécutez sp_addpublication (Transact-SQL), en affectant la valeur true au 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 de capture instantanée s'exécute pour @job_name 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 connexion SQL Server pour @publisher_login et @publisher_password. Un travail de l'Agent de capture instantanée est ainsi créé pour la publication.

  4. Ajoutez des articles à la publication. Pour plus d'informations, consultez Procédure : définir un article (programmation Transact-SQL de la réplication).

  5. Au niveau de l'Abonné, créez un abonnement avec mise à jour à cette publication. Pour plus d'informations, consultez Procédure : créer un abonnement pouvant être mis à jour à une publication transactionnelle (programmation Transact-SQL de la réplication).

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

    • Exécutez sp_addqreader_agent (Transact-SQL) au niveau du serveur de distribution. 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, consultez Modèle de sécurité de l'Agent de réplication.

  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 de capture instantanée 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 de connexion SQL Server pour @publisher_login et @publisher_password. Un travail de l'Agent de capture instantanée est ainsi créé pour la publication.

  5. Ajoutez des articles à la publication. Pour plus d'informations, consultez Procédure : définir un article (programmation Transact-SQL de la réplication).

  6. Au niveau de l'Abonné, créez un abonnement avec mise à jour à cette publication. Pour plus d'informations, consultez Procédure : créer un abonnement pouvant être mis à jour à une publication transactionnelle (programmation Transact-SQL de la réplication).

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

  • 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 reinit ou sub wins pour @value.

Exemple

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'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks]
-- 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 [AdventureWorks]
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_table = @article, 
    @vertical_partition = N'false', 
    @type = N'logbased',
    @source_owner = @owner, 
    @destination_owner = @owner;
GO