Configurar propriedades do instantâneo (Programação Transact-SQL da Replicação)

Aplica-se a: SQL ServerAzure SQL Managed Instance

As propriedades do snapshot podem ser definidas e modificadas programaticamente usando procedimentos armazenados de replicação, onde os procedimentos armazenados dependem do tipo de publicação.

Para configurar as propriedades do instantâneo ao criar um instantâneo ou uma publicação transacional

  1. No Publicador, execute sp_addpublication. Especifique um nome de publicação para @publication, um valor de snapshot ou continuous para @repl_freq, e um ou mais dos seguintes parâmetros relacionados com o snapshot:

    • @alt_snapshot_folder - especificar um caminho se o snapshot desta publicação for acedido a partir desse local em vez de, ou além da pasta predefinida do snapshot.
    • @compress_snapshot - especifique o valor true se os ficheiros de instantâneo na pasta de instantâneos alternativa estiverem comprimidos no formato de ficheiro CAB da Microsoft.
    • @pre_snapshot_script - especificar o nome do ficheiro e o caminho completo de um ficheiro .sql que será executado no Assinante durante a inicialização antes da aplicação do snapshot inicial.
    • @post_snapshot_script - especificar o nome do ficheiro e o caminho completo de um ficheiro .sql que será executado no assinante durante a inicialização após a aplicação do snapshot inicial.
    • @snapshot_in_defaultfolder - especificar um valor de false se o snapshot estiver disponível apenas numa localização não predefinida.

    Para mais informações sobre a criação de publicações, consulte Criar uma Publicação.

Para configurar propriedades de snapshot ao criar uma publicação de fusão

  1. No Publisher, executa sp_addmergepublication. Especifique um nome de publicação para @publication, um valor de snapshot ou contínuo para @repl_freq, e um ou mais dos seguintes parâmetros relacionados com snapshot:

    • alt_snapshot_folder - especificar um caminho se o snapshot desta publicação for acedido a partir desse local em vez de, ou além da pasta predefinida do snapshot.
    • @compress_snapshot - especificar o valor true se os ficheiros de instantâneo na pasta alternativa de instantâneos estiverem comprimidos no formato CAB.
    • @pre_snapshot_script - especificar o nome do ficheiro e o caminho completo de um ficheiro .sql que será executado no Assinante durante a inicialização antes da aplicação do snapshot inicial.
    • @post_snapshot_script - especificar o nome do ficheiro e o caminho completo de um ficheiro .sql que será executado no assinante durante a inicialização após a aplicação do snapshot inicial.
    • @snapshot_in_defaultfolder - especificar um valor de false se o snapshot estiver disponível apenas numa localização não predefinida.
  2. Para mais informações sobre a criação de publicações, consulte Criar uma Publicação.

Modificar propriedades de snapshot de um snapshot existente ou publicação transacional

  1. No Publisher da base de dados de publicações, execute sp_changepublication. Especifique um valor de 1 para @force_invalidate_snapshot e um dos seguintes valores para @property:

    • alt_snapshot_folder -also especificar um novo caminho para a pasta alternativa de snapshots para @value.
    • compress_snapshot - especifique também um valor de verdadeiro ou falso para @value para indicar se os ficheiros de snapshot na pasta alternativa de snapshot estão comprimidos no formato CAB.
    • pre_snapshot_script - também em @value especifique o nome do ficheiro e o caminho completo de um ficheiro .sql que será executado no Assinante durante a inicialização, antes de o snapshot inicial ser aplicado.
    • post_snapshot_script - também para @value especificar o nome do ficheiro e o caminho completo de um ficheiro .sql que será executado no Assinante durante a inicialização após a aplicação do snapshot inicial.
    • snapshot_in_defaultfolder - também especificar um valor de verdadeiro ou falso para indicar se o instantâneo está disponível apenas numa localização não predefinida.
  2. (Opcional) No Publisher, na base de dados de publicação, execute sp_changepublication_snapshot. Especifique @publication e um ou mais parâmetros de agendamento ou credenciais de segurança a alterar.

    Importante

    Quando possível, solicite que os usuários insiram credenciais de segurança em tempo de execução. Se você precisar armazenar credenciais em um arquivo de script, deverá proteger o arquivo para impedir o acesso não autorizado.

  3. Execute o Replication Snapshot Agent a partir do prompt de comandos ou inicie o trabalho Snapshot Agent para gerar um novo snapshot. Para mais informações, consulte Criar e Aplicar o Snapshot Inicial.

Para modificar propriedades de snapshot de uma publicação de fusão existente

  1. No Publicador, na base de dados de publicação, execute sp_changemergepublication. Especifique um valor de 1 para @force_invalidate_snapshot e um dos seguintes valores para @property**:

    • alt_snapshot_folder -also especificar um novo caminho para a pasta alternativa de snapshots para @value.
    • compress_snapshot - especifique também o valor true ou false para @value, de modo a indicar se os ficheiros de instantâneo na pasta alternativa de instantâneos estão comprimidos no formato de ficheiro CAB.
    • pre_snapshot_script - também para @value especificar o nome do ficheiro e o caminho completo de um ficheiro .sql que será executado no Assinante durante a inicialização antes da aplicação do snapshot inicial.
    • post_snapshot_script - especificar também para @value o nome do ficheiro e o caminho completo de um ficheiro .sql que será executado no Subscritor durante a inicialização, depois de aplicado o instantâneo inicial.
    • snapshot_in_defaultfolder - também especificar um valor de verdadeiro ou falso para indicar se o instantâneo está disponível apenas numa localização não predefinida.
  2. Execute o Replication Snapshot Agent a partir do prompt de comandos ou inicie o trabalho Snapshot Agent para gerar um novo snapshot. Para mais informações, consulte Criar e Aplicar o Snapshot Inicial.

Example

Este exemplo cria uma publicação que utiliza uma pasta alternativa para instantâneos e um instantâneo comprimido.

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