Partager via


Configurer les propriétés d’instantané (programmation Transact-SQL de la réplication)

S’applique à : SQL Server Azure SQL Managed Instance

Les propriétés d'instantané peuvent être définies et modifiées par programme à l'aide de procédures stockées de réplication qui dépendent du type de publication.

Pour configurer les propriétés d'instantané lors de la création d'une publication transactionnelle ou d'instantané

  1. Sur le serveur de publication, exécutez sp_addpublication. Spécifiez un nom de publication pour @publication, la valeur snapshot ou continuous pour @repl_freq, ainsi qu’un ou plusieurs des paramètres suivants liés à l’instantané :

    • @alt_snapshot_folder – spécifiez un chemin si l’accès à l’instantané pour cette publication s’effectue à partir de cet emplacement à la place ou en plus du dossier d’instantanés par défaut.
    • @compress_snapshot – spécifiez la valeur true si les fichiers d’instantanés dans le dossier d’instantanés de remplacement sont compressés au format de fichier Microsoft CAB.
    • @pre_snapshot_script – spécifiez le nom de fichier et le chemin complet d’un fichier .sql qui sera exécuté sur l’Abonné au cours de l’initialisation, avant que l’instantané initial soit appliqué.
    • @post_snapshot_script – spécifiez le nom de fichier et le chemin complet d’un fichier .sql qui sera exécuté sur l’Abonné au cours de l’initialisation, après l’application de l’instantané initial.
    • @snapshot_in_defaultfolder – spécifiez la valeur false si l’instantané est disponible uniquement à un emplacement non défini par défaut.

    Pour plus d'informations sur la création des publications, consultez Create a Publication.

Pour configurer les propriétés d'instantané lors de la création d'une publication de fusion

  1. Sur le serveur de publication, exécutez sp_addmergepublication. Spécifiez un nom de publication pour @publication, la valeur snapshot ou continuous pour @repl_freq, ainsi qu’un ou plusieurs des paramètres suivants liés à l’instantané :

    • alt_snapshot_folder – spécifiez un chemin si l’accès à l’instantané pour cette publication s’effectue à partir de cet emplacement à la place ou en plus du dossier d’instantanés par défaut.
    • @compress_snapshot – spécifiez la valeur true si les fichiers d’instantanés dans le dossier d’instantanés de remplacement sont compressés au format de fichier CAB.
    • @pre_snapshot_script – spécifiez le nom de fichier et le chemin complet d’un fichier .sql qui sera exécuté sur l’Abonné au cours de l’initialisation, avant que l’instantané initial soit appliqué.
    • @post_snapshot_script – spécifiez le nom de fichier et le chemin complet d’un fichier .sql qui sera exécuté sur l’Abonné au cours de l’initialisation, après l’application de l’instantané initial.
    • @snapshot_in_defaultfolder – spécifiez la valeur false si l’instantané est disponible uniquement à un emplacement non défini par défaut.
  2. Pour plus d'informations sur la création des publications, consultez Create a Publication.

Pour modifier les propriétés d'instantané d'une publication transactionnelle ou d'instantané existante

  1. Dans la base de données de publication sur le serveur de publication, exécutez sp_changepublication. Spécifiez la valeur 1 pour @force_invalidate_snapshot et l’une des valeurs suivantes pour @property :

    • alt_snapshot_folder – spécifiez également un nouveau chemin au dossier d’instantanés de remplacement pour @value.
    • compress_snapshot – spécifiez également la valeur true ou false pour @value afin d’indiquer si les fichiers d’instantanés stockés dans le dossier d’instantanés de remplacement sont compressés au format de fichier CAB.
    • pre_snapshot_script – spécifiez également pour @value le nom de fichier et le chemin complet d’un fichier .sql qui sera exécuté sur l’Abonné au cours de l’initialisation, avant que l’instantané initial soit appliqué.
    • post_snapshot_script – spécifiez également pour @value le nom de fichier et le chemin complet d’un fichier .sql qui sera exécuté sur l’Abonné au cours de l’initialisation, après l’application de l’instantané initial.
    • snapshot_in_defaultfolder – spécifiez également la valeur true ou false pour indiquer si l'instantané est disponible uniquement dans un emplacement non défini par défaut.
  2. (Facultatif) Sur le serveur de publication, dans la base de données de publication, exécutez sp_changepublication_snapshot. Spécifiez @publication et un ou plusieurs des paramètres de planification ou d’informations d’identification de sécurité en cours de modification.

    Important

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

  3. Exécutez l' Replication Snapshot Agent à partir de l'invite de commandes ou démarrez le travail de l'Agent d'instantané pour générer un nouvel instantané. Pour plus d’informations, voir Create and Apply the Initial Snapshot.

Pour modifier les propriétés d'instantané d'une publication de fusion existante

  1. Dans la base de données de publication sur le serveur de publication, exécutez sp_changemergepublication. Spécifiez la valeur 1 pour @force_invalidate_snapshot et l’une des valeurs suivantes pour @property** :

    • alt_snapshot_folder – spécifiez également un nouveau chemin au dossier d’instantanés de remplacement pour @value.
    • compress_snapshot – spécifiez également la valeur true ou false pour @value afin d’indiquer si les fichiers d’instantanés stockés dans le dossier d’instantanés de remplacement sont compressés au format de fichier CAB.
    • pre_snapshot_script – spécifiez également pour @value le nom de fichier et le chemin complet d’un fichier .sql qui sera exécuté sur l’Abonné au cours de l’initialisation, avant que l’instantané initial soit appliqué.
    • post_snapshot_script – spécifiez également pour @value le nom de fichier et le chemin complet d’un fichier .sql qui sera exécuté sur l’Abonné au cours de l’initialisation, après l’application de l’instantané initial.
    • snapshot_in_defaultfolder – spécifiez également la valeur true ou false pour indiquer si l'instantané est disponible uniquement dans un emplacement non défini par défaut.
  2. Exécutez l' Replication Snapshot Agent à partir de l'invite de commandes ou démarrez le travail de l'Agent d'instantané pour générer un nouvel instantané. Pour plus d’informations, voir Create and Apply the Initial Snapshot.

Exemple

Cet exemple crée une publication qui utilise un dossier d'instantanés de remplacement et un instantané compressé.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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 @article AS sysname;
DECLARE @owner AS sysname;
DECLARE @snapshot_share AS sysname;
SET @publicationDB = N'AdventureWorks2022'; 
SET @publication = N'AdvWorksSalesOrdersMergeAltSnapshot'; 
SET @article = N'SpecialOffer';
SET @owner = N'Sales';
SET @snapshot_share = '\\' + $(InstanceName) + '\AltSnapshotFolder';

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

-- Create new merge publication with an alternate snapshot location. 
USE [AdventureWorks]
EXEC sp_addmergepublication 
-- required parameters
    @publication = @publication, 
    @snapshot_in_defaultfolder = N'false',
    @alt_snapshot_folder = @snapshot_share,
    @compress_snapshot = N'true';

-- Create the snapshot job for the publication.
EXEC sp_addpublication_snapshot 
    @publication = @publication,
    @job_login = $(Login),
    @job_password = $(Password);

-- Add an article.
EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_object = @article, 
    @type = N'table', 
    @source_owner = @owner, 
    @destination_owner = @owner;

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