Cómo crear la instantánea inicial (programación de la replicación con Transact-SQL)

Las instantáneas iniciales se pueden crear mediante programación o creando y ejecutando un trabajo del Agente de instantáneas o ejecutando el archivo ejecutable Agente de instantáneas desde un archivo por lotes. Una vez generada una instantánea inicial, se transfiere y se aplica en el suscriptor cuando se sincroniza la suscripción por primera vez. Si ejecuta el Agente de instantáneas desde un símbolo del sistema o un archivo por lotes, necesitará volver a ejecutar el agente cada vez que la instantánea existente deje de ser válida.

Las publicaciones de mezcla que utilizan filtros con parámetros necesitan una instantánea de dos partes. Para obtener más información, vea Cómo crear una instantánea para una publicación de mezcla con filtros con parámetros (programación de la replicación con Transact-SQL).

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.

Para crear y ejecutar un trabajo del Agente de instantáneas que genere la instantánea inicial

  1. Cree una publicación de instantáneas, transaccional o de mezcla Para obtener más información, vea Cómo crear una publicación (programación de la replicación con Transact-SQL).

  2. Ejecute sp_addpublication_snapshot (Transact-SQL). Especifique @publication y los siguientes parámetros:

    • @job_login, que especifica las credenciales de autenticación de Windows con las que se ejecuta el Agente de instantáneas en el distribuidor.

    • @job_password, que es la contraseña para las credenciales de Windows proporcionadas.

    • (Opcional) El valor 0 para @publisher_security_mode si el agente va a utilizar autenticación de SQL Server para conectarse al publicador. En este caso, debe especificar también la información de inicio de sesión de autenticación de SQL Server para @publisher_login y @publisher_password.

    • (Opcional) Un programa de sincronización para el trabajo del Agente de instantáneas. Para obtener más información, vea Cómo especificar programaciones de sincronización (programación de la replicación con Transact-SQL).

    Nota de seguridadNota de seguridad

     Al configurar un publicador con un distribuidor remoto, los valores suministrados para todos los parámetros, incluidos job_login y job_password, se envían al distribuidor como texto simple. Antes de ejecutar este procedimiento almacenado, se recomienda cifrar la conexión entre el publicador y su distribuidor remoto. Para obtener más información, vea Cifrar conexiones a SQL Server.

  3. Agregue artículos a la publicación. Para obtener más información, vea Cómo definir un artículo (programación de la replicación con Transact-SQL).

  4. En la base de datos de publicación del publicador, ejecute sp_startpublication_snapshot (Transact-SQL), especificando el valor de @publication del paso 1.

Para ejecutar el Agente de instantáneas y generar una instantánea inicial

  1. Cree una publicación de instantáneas, transaccional o de mezcla. Para obtener más información, vea Cómo crear una publicación (programación de la replicación con Transact-SQL).

  2. Agregue artículos a la publicación. Para obtener más información, vea Cómo definir un artículo (programación de la replicación con Transact-SQL).

  3. Desde el símbolo del sistema o en un archivo por lotes, inicie el Agente de instantáneas de replicación ejecutando snapshot.exe y especifique los argumentos de la línea de comandos siguientes:

    • -Publication

    • -Publisher

    • -Distributor

    • -PublisherDB

    • -ReplicationType

    Si está usando la autenticación de SQL Server, también debe especificar los argumentos siguientes:

    • -DistributorLogin

    • -DistributorPassword

    • -DistributorSecurityMode = 0

    • -PublisherLogin

    • -PublisherPassword

    • -PublisherSecurityMode = 0

Ejemplo

Este ejemplo muestra cómo crear una publicación transaccional y agregar un trabajo del Agente de instantáneas para la nueva publicación (utilizando variables de scripts de sqlcmd ). En el ejemplo también se inicia el trabajo.

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

USE [AdventureWorks]

-- 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 [AdventureWorks]
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

En este ejemplo se crea una publicación de mezcla y se agrega un trabajo del Agente de instantáneas (utilizando variables de sqlcmd ) para la publicación. En este ejemplo también se inicia el trabajo.

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

Los siguientes argumentos de la línea de comandos inician el Agente de instantáneas para que genere la instantánea para una publicación de mezcla.

[!NOTA]

Los saltos de línea se incluyeron para mejorar la legibilidad. En un archivo por lotes, los comandos se deben realizar en una única línea.

REM -- Declare variables
SET Publisher=%InstanceName%
SET PublicationDB=AdventureWorks 
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