Procédure : créer la capture instantanée initiale (programmation Transact-SQL de la réplication)

Les captures instantanées initiales peuvent être créées par programme en créant et exécutant un travail de l'Agent de capture instantanée ou en exécutant le fichier exécutable de l'Agent de capture instantanée à partir d'un fichier de commandes. Une fois qu'une capture instantanée initiale a été générée, elle est transférée et appliquée sur l'Abonné lorsque l'abonnement est synchronisé pour la première fois. Si vous exécutez l'Agent de capture instantanée à partir d'une invite de commandes ou d'un fichier de commandes, vous devrez exécuter de nouveau l'agent chaque fois que la capture instantanée existante deviendra non valide.

Les publications de fusion qui utilisent des filtres paramétrés nécessitent une capture instantanée en deux parties. Pour plus d'informations, consultez Procédure : créer une capture instantanée pour une publication de fusion avec des filtres paramétrables (programmation Transact-SQL de la réplication).

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 les informations d'identification dans un fichier de script, vous devez sécuriser le fichier pour empêcher tout accès non autorisé.

Pour créer et exécuter un travail de l'Agent de capture instantanée pour générer la capture instantanée initiale

  1. Créez une publication de capture instantanée, transactionnelle ou de fusion. Pour plus d'informations, consultez Procédure : créer une publication (programmation Transact-SQL de la réplication).

  2. Exécutez sp_addpublication_snapshot (Transact-SQL). Spécifiez @publication et les paramètres suivants :

    • @job_login, qui spécifie les informations d'identification de l'authentification Windows qu'utilise l'Agent de capture instantanée pour s'exécuter sur le serveur de distribution.

    • @job_password, qui correspond au mot de passe pour les informations d'identification Windows fournies.

    • (Facultatif) La valeur 0 pour @publisher_security_mode si l'agent utilisera l'authentification SQL Server lors de la connexion au serveur de publication. Dans ce cas, vous devez également spécifier les informations de connexion d'authentification SQL Server pour @publisher_login et @publisher_password.

    • (Facultatif) Une planification de synchronisation pour le travail de l'Agent de capture instantanée. Pour plus d'informations, consultez Procédure : spécifier des planifications de synchronisation (programmation Transact-SQL de la réplication).

    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.

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

  4. Sur le serveur de publication, sur la base de données de publication, exécutez sp_startpublication_snapshot (Transact-SQL), en spécifiant la valeur de @publication définie à l'étape 1.

Pour exécuter l'Agent de capture instantanée afin de générer la capture instantanée initiale

  1. Créez une publication de capture instantanée, transactionnelle ou de fusion. Pour plus d'informations, consultez Procédure : créer une publication (programmation Transact-SQL de la réplication).

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

  3. À partir de l'invite de commandes ou d'un fichier de commandes, démarrez l'Agent de capture instantanée de réplication en exécutant snapshot.exe, en spécifiant les arguments de ligne de commande suivants :

    • -Publication

    • -Publisher

    • -Distributor

    • -PublisherDB

    • -ReplicationType

    Si vous utilisez l'authentification SQL Server, vous devez également spécifier les arguments suivants :

    • -DistributorLogin

    • -DistributorPassword

    • -DistributorSecurityMode = 0

    • -PublisherLogin

    • -PublisherPassword

    • -PublisherSecurityMode = 0

Exemple

Cet exemple montre comment créer une publication transactionnelle et ajouter un travail de l'Agent de capture instantanée pour la nouvelle publication (à l'aide des variables de script sqlcmd). L'exemple démarre également le travail.

-- 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'; --publication database
SET @publication = N'AdvWorksCustomerTran'; -- transactional publication name
SET @login = $(Login);
SET @password = $(Password);

USE [AdventureWorks2008R2]

-- Enable transactional and 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 security mode used when connecting to the Publisher.
  @publisher_security_mode = 1;

-- Create new transactional publication, using the defaults. 
USE [AdventureWorks2008R2]
EXEC sp_addpublication 
  @publication = @publication, 
  @description = N'transactional publication';

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

-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO

Cet exemple crée une publication de fusion et ajoute un travail de l'Agent de capture instantanée (à l'aide des variables sqlcmd) pour la publication. Cet exemple démarre également le travail.

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

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.
USE master
EXEC sp_replicationdboption 
  @dbname = @publicationDB, 
  @optname=N'merge publish',
  @value = N'true';

-- Create new merge publication, using the defaults. 
USE [AdventureWorks2008R2]
EXEC sp_addmergepublication 
  @publication = @publication, 
  @description = N'Merge publication.';

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

-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO

Les arguments de ligne de commande suivants démarrent l'Agent de capture instantanée pour générer la capture instantanée pour une publication de fusion.

Notes

Des sauts de ligne ont été ajoutés pour améliorer la lisibilité. Dans un fichier de commandes, les commandes doivent figurer sur une ligne unique.

REM -- Declare variables
SET Publisher=%InstanceName%
SET PublicationDB=AdventureWorks2008R2 
SET Publication=AdvWorksSalesOrdersMerge 

REM --Start the Snapshot Agent to generate the snapshot for AdvWorksSalesOrdersMerge.
"C:\Program Files\Microsoft SQL Server\100\COM\SNAPSHOT.EXE" -Publication %Publication% 
-Publisher %Publisher% -Distributor %Publisher% -PublisherDB %PublicationDB% 
-ReplicationType 2 -OutputVerboseLevel 1 -DistributorSecurityMode 1