Condividi tramite


Configurare le proprietà dello snapshot (programmazione Transact-SQL della replica)

Si applica a: SQL Server e Istanza gestita di SQL di Azure

Le proprietà dello snapshot possono essere definite e modificate a livello di programmazione tramite le stored procedure di replica. Le stored procedure utilizzate dipendono dal tipo di pubblicazione.

Per configurare le proprietà dello snapshot durante la creazione di una pubblicazione snapshot o transazionale

  1. Nel server di pubblicazione eseguire sp_addpublication. Specificare il nome della pubblicazione per @publication, il valore snapshot o continuous per @repl_freq e uno o più parametri correlati allo snapshot seguenti:

    • @alt_snapshot_folder: specificare un percorso se allo snapshot di questa pubblicazione si accede da tale percorso in alternativa o in aggiunta alla cartella snapshot predefinita.
    • @compress_snapshot: specificare il valore true se i file di snapshot presenti nella cartella snapshot alternativa sono compressi nel formato Microsoft CAB.
    • @pre_snapshot_script: specificare il nome e il percorso completo di un file con estensione sql che verrà eseguito nel Sottoscrittore durante l'inizializzazione prima dell'applicazione dello snapshot iniziale.
    • @post_snapshot_script: specificare il nome e il percorso completo di un file con estensione sql che verrà eseguito nel Sottoscrittore durante l'inizializzazione dopo l'applicazione dello snapshot iniziale.
    • @snapshot_in_defaultfolder: specificare il valore false se lo snapshot è disponibile solo in un percorso non predefinito.

    Per ulteriori informazioni sulla creazione di pubblicazioni, vedere Create a Publication.

Per configurare le proprietà dello snapshot durante la creazione di una pubblicazione di tipo merge

  1. Nel server di pubblicazione eseguire sp_addmergepublication. Specificare il nome della pubblicazione per @publication, il valore snapshot o continuous per @repl_freq e uno o più parametri correlati allo snapshot seguenti:

    • alt_snapshot_folder: specificare un percorso se allo snapshot di questa pubblicazione si accede da tale percorso alternativa o in aggiunta alla cartella snapshot predefinita.
    • @compress_snapshot: specificare il valore true se i file di snapshot presenti nella cartella snapshot alternativa sono compressi nel formato CAB.
    • @pre_snapshot_script: specificare il nome e il percorso completo di un file con estensione sql che verrà eseguito nel Sottoscrittore durante l'inizializzazione prima dell'applicazione dello snapshot iniziale.
    • @post_snapshot_script: specificare il nome e il percorso completo di un file con estensione sql che verrà eseguito nel Sottoscrittore durante l'inizializzazione dopo l'applicazione dello snapshot iniziale.
    • @snapshot_in_defaultfolder: specificare il valore false se lo snapshot è disponibile solo in un percorso non predefinito.
  2. Per ulteriori informazioni sulla creazione di pubblicazioni, vedere Create a Publication.

Per modificare le proprietà dello snapshot di una pubblicazione snapshot o transazionale esistente

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_changepublication. Specificare il valore 1 per @force_invalidate_snapshot e uno dei valori seguenti per @property:

    • alt_snapshot_folder: specificare anche un nuovo percorso della cartella snapshot alternativa per @value.
    • compress_snapshot: specificare anche il valore true o false per @value in modo da indicare se i file di snapshot presenti nella cartella snapshot alternativa sono compressi nel formato CAB.
    • pre_snapshot_script: sempre per @value specificare il nome e il percorso completo di un file con estensione sql che verrà eseguito nel Sottoscrittore durante l'inizializzazione prima dell'applicazione dello snapshot iniziale.
    • post_snapshot_script: sempre per @value specificare il nome e il percorso completo di un file con estensione sql che verrà eseguito nel Sottoscrittore durante l'inizializzazione dopo l'applicazione dello snapshot iniziale.
    • snapshot_in_defaultfolder : specificare anche il valore true o false per indicare se lo snapshot è disponibile solo in un percorso non predefinito.
  2. (Facoltativo) Nel database di pubblicazione del server di pubblicazione eseguire sp_changepublication_snapshot. Specificare @publication e uno o più parametri di pianificazione o delle credenziali di sicurezza da modificare.

    Importante

    Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione. Se è necessario archiviare le credenziali in un file script, è fondamentale proteggere il file per evitare accessi non autorizzati.

  3. Eseguire Replication Snapshot Agent dal prompt dei comandi o avviare il processo dell'agente snapshot per generare un nuovo snapshot. Per altre informazioni, vedere Creazione e applicazione dello snapshot iniziale.

Per modificare le proprietà dello snapshot di una pubblicazione di tipo merge esistente

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_changemergepublication. Specificare il valore 1 per @force_invalidate_snapshot e uno dei valori seguenti per @property**:

    • alt_snapshot_folder: specificare anche un nuovo percorso della cartella snapshot alternativa per @value.
    • compress_snapshot: specificare anche il valore true o false per @value in modo da indicare se i file di snapshot presenti nella cartella snapshot alternativa sono compressi nel formato CAB.
    • pre_snapshot_script: sempre per @value specificare il nome e il percorso completo di un file con estensione sql che verrà eseguito nel Sottoscrittore durante l'inizializzazione prima dell'applicazione dello snapshot iniziale.
    • post_snapshot_script: sempre per @value specificare il nome e il percorso completo di un file con estensione sql che verrà eseguito nel Sottoscrittore durante l'inizializzazione dopo l'applicazione dello snapshot iniziale.
    • snapshot_in_defaultfolder : specificare anche il valore true o false per indicare se lo snapshot è disponibile solo in un percorso non predefinito.
  2. Eseguire Replication Snapshot Agent dal prompt dei comandi o avviare il processo dell'agente snapshot per generare un nuovo snapshot. Per altre informazioni, vedere Creazione e applicazione dello snapshot iniziale.

Esempio

In questo esempio viene creata una pubblicazione che utilizza una cartella snapshot alternativa e uno snapshot compresso.

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