Cómo configurar propiedades de instantáneas (programación de la replicación con Transact-SQL)

Las propiedades de las instantáneas se pueden definir y modificar mediante programación usando procedimientos almacenados de replicación, los cuales dependerán del tipo de publicación.

Para configurar propiedades de instantáneas al crear una instantánea o una publicación transaccional

  • En el publicador, ejecute sp_addpublication. Especifique un nombre de publicación para @publication, el valor snapshot o continuous para @repl_freqy uno o más de los siguientes parámetros relacionados con instantáneas:

    • @alt_snapshot_folder - especifique una ruta si a la instantánea de esta publicación se tiene acceso desde esa ubicación en lugar o además de desde la carpeta predeterminada para instantáneas.

    • @compress_snapshot - especifique el valor true si los archivos de instantáneas de la carpeta de instantáneas están comprimidos en el formato de archivo CAB de Microsoft.

    • @pre_snapshot_script - especifique el nombre de archivo y la ruta completa de un archivo .sql que se ejecutará en el suscriptor durante la inicialización antes de que se aplique la instantánea inicial.

    • @ost_snapshot_script - especifique el nombre de archivo y la ruta completa de un archivo .sql que se ejecutará en el suscriptor durante la inicialización antes de que se aplique la instantánea inicial.

    • @snapshot_in_defaultfolder - especifique el valor false si la instantánea únicamente está disponible en una ubicación que no es la predeterminada.

    Para obtener más información acerca de la creación de publicaciones, vea Cómo crear una publicación (programación de la replicación con Transact-SQL).

Para configurar propiedades de instantáneas al crear una publicación de mezcla

  1. En el publicador, ejecute sp_addmergepublication. Especifique un nombre de publicación para @publication, el valor snapshot o continuous para @repl_freqy uno o más de los siguientes parámetros relacionados con instantáneas:

    • @alt_snapshot_folder - especifique una ruta si a la instantánea de esta publicación se tiene acceso desde esa ubicación en lugar o además de desde la carpeta predeterminada para instantáneas.

    • @compress_snapshot - especifique el valor true si los archivos de instantáneas de la carpeta de instantáneas están comprimidos en el formato de archivo CAB.

    • @pre_snapshot_script - especifique el nombre de archivo y la ruta completa de un archivo .sql que se ejecutará en el suscriptor durante la inicialización antes de que se aplique la instantánea inicial.

    • @ost_snapshot_script - especifique el nombre de archivo y la ruta completa de un archivo .sql que se ejecutará en el suscriptor durante la inicialización antes de que se aplique la instantánea inicial.

    • @snapshot_in_defaultfolder - especifique el valor false si la instantánea únicamente está disponible en una ubicación que no es la predeterminada.

  2. Para obtener más información acerca de la creación de publicaciones, vea Cómo crear una publicación (programación de la replicación con Transact-SQL).

Para modificar las propiedades de instantánea de una instantánea o de una publicación transaccional existente

  1. En la base de datos de publicación del publicador, ejecute sp_changepublication. Especifique el valor 1 para @force_invalidate_snapshot y uno de los valores siguientes para @property:

    • alt_snapshot_folder - especifique también una nueva ruta a la carpeta de instantáneas alternativa para @value.

    • compress_snapshot - especifique también el valor true o false para @value para indicar si los archivos de instantáneas de la carpeta de instantáneas alternativa están comprimidos en el formato de archivo CAB.

    • pre_snapshot_script - especifique también para @value el nombre de archivo y la ruta completa de un archivo .sql que se ejecutará en el suscriptor durante la inicialización antes de que se aplique la instantánea inicial.

    • post_snapshot_script - especifique también para @value el nombre de archivo y la ruta completa de un archivo .sql que se ejecutará en el suscriptor durante la inicialización antes de que se aplique la instantánea inicial.

    • snapshot_in_defaultfolder - especifique también el valor true o false para indicar si la instantánea está disponible únicamente en una ubicación que no es la predeterminada.

  2. (Opcional) En la base de datos de publicación del publicador, ejecute sp_changepublication. Especifique @publication y uno o más de los parámetros de credenciales de seguridad o de programación que se están cambiando.

    Nota de seguridadNota de seguridad

    Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar las credenciales en un archivo de script, protéjalo para evitar el acceso no autorizado.

  3. Ejecute el Agente de instantáneas de replicación desde el símbolo del sistema o inicie el trabajo del Agente de instantáneas para generar una nueva instantánea. Para obtener más información, vea Cómo crear la instantánea inicial (programación de la replicación con Transact-SQL).

Para modificar las propiedades de instantánea de una publicación de mezcla existente

  1. En la base de datos de publicación del publicador, ejecute sp_changemergepublication. Especifique el valor 1 para @force_invalidate_snapshot y uno de los valores siguientes para @property:

    • alt_snapshot_folder - especifique también una nueva ruta a la carpeta de instantáneas alternativa para @value.

    • compress_snapshot - especifique también el valor true o false para @value para indicar si los archivos de instantáneas de la carpeta de instantáneas alternativa están comprimidos en el formato de archivo CAB.

    • pre_snapshot_script - especifique también para @value el nombre de archivo y la ruta completa de un archivo .sql que se ejecutará en el suscriptor durante la inicialización antes de que se aplique la instantánea inicial.

    • post_snapshot_script - especifique también para @value el nombre de archivo y la ruta completa de un archivo .sql que se ejecutará en el suscriptor durante la inicialización antes de que se aplique la instantánea inicial.

    • snapshot_in_defaultfolder - especifique también el valor true o false para indicar si la instantánea está disponible únicamente en una ubicación que no es la predeterminada.

  2. Ejecute el Agente de instantáneas de replicación desde el símbolo del sistema o inicie el trabajo del Agente de instantáneas para generar una nueva instantánea. Para obtener más información, vea Cómo crear la instantánea inicial (programación de la replicación con Transact-SQL).

Ejemplo

En este ejemplo se crea una publicación que usa una carpeta de instantáneas alternativa y una instantánea comprimida.

-- 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'AdventureWorks'; 
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