Como criar o instantâneo inicial (Programação Transact-SQL de replicação)

Instantâneos iniciais podem ser criados de forma programada criando e executando um trabalho do Snapshot Agent ou executando o arquivo executável do Snapshot Agent de um arquivo em lote. Depois da geração de um instantâneo inicial, ele é transferido para e aplicado no Assinante quando a assinatura é sincronizada pela primeira vez. Se o Snapshot Agent for executado de um prompt de comando ou um arquivo em lote, será preciso executar novamente o agente sempre que o instantâneo existente se tornar inválido.

Publicações de mesclagem que usam filtros com parâmetros exigem um instantâneo de duas partes. Para obter mais informações, consulte Como criar um instantâneo para uma publicação de mesclagem com filtros com parâmetros (Programação Transact-SQL de replicação).

Observação sobre segurançaObservação sobre segurança

Quando possível, solicite que os usuários insiram as credenciais de segurança em tempo de execução. Se for necessário armazenar credenciais em um arquivo de script, deve-se proteger o arquivo para evitar acesso não autorizado.

Para criar e executar um trabalho do Snapshot Agent a fim de gerar o instantâneo inicial

  1. Crie uma publicação de instantâneo, transacional ou de mesclagem. Para obter mais informações, consulte Como criar uma publicação (Programação Transact-SQL de replicação).

  2. Execute sp_addpublication_snapshot (Transact-SQL). Especifique @publication e os seguintes parâmetros:

    • O @job_login que especifica as credenciais da Autenticação do Windows sob as quais o Snapshot Agent é executado no Distribuidor.

    • O @job_password, que é a senha para as credenciais do Windows fornecidas.

    • (Opcional) Um valor 0 para @publisher_security_mode se o agente usar Autenticação do SQL Server ao se conectar ao Publicador. Nesse caso, deve-se especificar também a informação de logon da Autenticação do SQL Server para @publisher_login e @publisher_password.

    • (Opcional) Uma agenda de sincronização para o trabalho do Snapshot Agent. Para obter mais informações, consulte Como especificar agendas de sincronização (Programação Transact-SQL de replicação).

    Observação sobre segurançaObservação sobre segurança

     Quando um Publicador é configurado com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, inclusive job_login e job_password, são enviados ao Distribuidor como texto sem formatação. Deve-se criptografar a conexão entre o Publicador e seu Distribuidor remoto antes de executar esse procedimento armazenado. Para obter mais informações, consulte Criptografando conexões com o SQL Server.

  3. Adicione artigos à publicação. Para obter mais informações, consulte Como definir um artigo (Programação Transact-SQL de replicação).

  4. No Publicador do banco de dados de publicação, execute sp_startpublication_snapshot (Transact-SQL), especificando o valor @publication da etapa 1.

Para executar o Snapshot Agent para gerar o instantâneo inicial.

  1. Crie uma publicação de instantâneo, transacional ou de mesclagem. Para obter mais informações, consulte Como criar uma publicação (Programação Transact-SQL de replicação).

  2. Adicione artigos à publicação. Para obter mais informações, consulte Como definir um artigo (Programação Transact-SQL de replicação).

  3. Do prompt de comando ou em um arquivo em lote, inicie o Replication Snapshot Agent executando snapshot.exe, especificando os seguintes argumentos de linha de comando:

    • -Publication

    • -Publisher

    • -Distributor

    • -PublisherDB

    • -ReplicationType

    Se você estiver usando Autenticação do SQL Server, deve-se também especificar os seguintes argumentos:

    • -DistributorLogin

    • -DistributorPassword

    • -DistributorSecurityMode = 0

    • -PublisherLogin

    • -PublisherPassword

    • -PublisherSecurityMode = 0

Exemplo

Esse exemplo mostra como criar uma publicação transacional e adicionar um trabalho do Snapshot Agent para a nova publicação (usando variáveis de script sqlcmd). O exemplo também inicia o trabalho.

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

USE [AdventureWorks2008R2]

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

Esse exemplo cria uma publicação de mesclagem e adiciona um trabalho do Snapshot Agent (usando variáveis sqlcmd) para a publicação. Esse exemplo também inicia o trabalho.

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

Os seguintes argumentos de linha de comando iniciam o Snapshot Agent para gerar o instantâneo para uma publicação de mesclagem.

ObservaçãoObservação

Quebras de linhas foram adicionadas para melhorar a legibilidade. Em um arquivo em lotes, devem ser feitos comandos em uma única linha.

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