Procédure : créer une publication (programmation Transact-SQL de la réplication)

Il est possible de créer des publications par programme en utilisant les procédures stockées de réplication. Les procédures stockées à utiliser dépendent du type de publication à créer.

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

Lorsque c'est possible, utilisez l'authentification Windows. Si possible, invitez les utilisateurs à entrer leurs informations d'identification au moment de l'exécution. Si vous devez stocker les informations d'identification dans un fichier de script, vous devez sécuriser ce fichier pour empêcher tout accès non autorisé.

Pour créer une publication de capture instantanée ou une publication transactionnelle

  1. Exécutez sp_replicationdboption (Transact-SQL) sur la base de données de publication du serveur de publication pour activer la publication de la base de données actuelle à l'aide de la réplication transactionnelle ou de capture instantanée.

  2. Pour une publication transactionnelle, déterminez si un travail de l'Agent de lecture du journal existe pour la base de données de publication. (Cette étape n'est pas requise pour les publications de capture instantanée.)

    • Si un travail de l'Agent de lecture du journal existe pour la base de données de publication, passez à l'étape 3.

    • 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) sur la base de données de publication du serveur de publication.

    • Si le jeu de résultats est vide, créez un travail de l'Agent de lecture du journal. 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 l'authentification SQL Server lors de la connexion au serveur de publication, vous devez également spécifier la valeur 0 pour @publisher_security_mode et spécifier les informations de connexion à Microsoft SQL Server pour @publisher_login et @publisher_password. Passez à l'étape 3.

  3. Sur le serveur de publication, exécutez sp_addpublication (Transact-SQL). Spécifiez un nom de publication pour @publication et, pour le paramètre @repl_freq, spécifiez la valeur snapshot pour une publication de capture instantanée ou la valeur continuous pour une publication transactionnelle. Spécifiez d'autres options de publication éventuelles. Cela définit la publication.

    Notes

    Un nom de publication ne doit pas contenir les caractères suivants :

    % * [ ] | : " ? \ / < >

  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 spécifier la valeur 0 pour @publisher_security_mode et spécifier les informations de connexion à SQL Server pour @publisher_login et @publisher_password. Cela crée un travail de l'Agent de capture instantanée pour la publication.

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

     Lors de la configuration d'un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour tous les paramètres, y compris job_login et job_password, sont envoyées en texte brut au serveur de distribution. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d'exécuter cette procédure stockée. Pour plus d'informations, consultez Chiffrement des connexions à SQL Server.

  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. Démarrez le travail de l'Agent de capture instantanée pour générer la capture instantanée initiale pour cette publication. Pour plus d'informations, consultez Procédure : créer la capture instantanée initiale (programmation Transact-SQL de la réplication).

Pour créer une publication de fusion

  1. Sur le serveur de publication, exécutez sp_replicationdboption (Transact-SQL) pour activer la publication de la base de données actuelle à l'aide de la réplication de fusion.

  2. Exécutez sp_addmergepublication (Transact-SQL) sur la base de données de publication du serveur de publication. Spécifiez le nom de la publication pour @publication et d'autres options de publication éventuelles. Cela définit la publication.

    Notes

    Un nom de publication ne doit pas contenir les caractères suivants :

    % * [ ] | : " ? \ / < >

  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 @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 spécifier la valeur 0 pour @publisher_security_mode et spécifier les informations de connexion à SQL Server pour @publisher_login et @publisher_password. Cela crée un travail de l'Agent de capture instantanée pour la publication.

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

     Lors de la configuration d'un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour tous les paramètres, y compris job_login et job_password, sont envoyées en texte brut au serveur de distribution. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d'exécuter cette procédure stockée. Pour plus d'informations, consultez Chiffrement des connexions à SQL Server.

  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. Démarrez le travail de l'Agent de capture instantanée pour générer la capture instantanée initiale pour cette publication. Pour plus d'informations, consultez Procédure : créer la capture instantanée initiale (programmation Transact-SQL de la réplication).

Exemple

Cet exemple crée une publication transactionnelle. Des variables de script sont utilisées pour transmettre les informations d'identification Windows nécessaires pour créer les travaux pour l'Agent de capture instantanée et l'Agent de lecture du journal.

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

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2008R2'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot 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 new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

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

Cet exemple crée une publication de fusion. Des variables de script sont utilisées pour transmettre les informations d'identification Windows nécessaires pour créer le travail pour l'Agent de capture instantanée.

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. 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 merge publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2008R2'; 
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @login = $(Login);
SET @password = $(Password);

-- Enable merge replication on the publication database, using defaults.
USE master
EXEC sp_replicationdboption 
  @dbname=@publicationDB, 
  @optname=N'merge publish',
  @value = N'true' 

-- Create a new merge publication, explicitly setting the defaults. 
USE [AdventureWorks2008R2]
EXEC sp_addmergepublication 
-- These parameters are optional.
  @publication = @publication,
  -- optional parameters 
  @description = N'Merge publication of AdventureWorks2008R2.',
  @publication_compatibility_level  = N'90RTM';

-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = @login, 
  @job_password = @password;
GO