Compartilhar via


Criar e aplicar o instantâneo inicial

Este tópico descreve como criar e aplicar o instantâneo inicial no SQL Server 2012 usando o SQL Server Management Studio, o Transact-SQL ou o RMO (Replication Management Objects). Publicações de mesclagem que usam filtros com parâmetros exigem um instantâneo de duas partes. Para obter mais informações, consulte Criar um instantâneo para uma publicação de mesclagem com filtros com parâmetros.

Neste tópico

  • Para criar e aplicar o instantâneo inicial, usando:

    SQL Server Management Studio

    Transact-SQL

    RMO (Replication Management Objects)

Usando o SQL Server Management Studio

Por padrão, se o SQL Server Agent está sendo executado, um instantâneo é gerado imediatamente pelo Agente de Instantâneo depois que a publicação seja criada com o Assistente para Nova Publicação. Por padrão, isso é então aplicado pelo Agente de Distribuição (para replicações transacionais e instantâneas) ou o Agente de Mesclagem (para assinaturas de mesclagem) para todas as assinaturas. Um instantâneo também pode ser gerado usando o SQL Server Management Studio e o Replication Monitor. Para obter informações sobre como iniciar o Replication Monitor, consulte Iniciar o Replication Monitor.

Para criar um instantâneo no Management Studio

  1. Conecte-se ao Publicador no Management Studio e expanda o nó do servidor.

  2. Expanda a pasta Replicação e, em seguida, a pasta Publicações Locais.

  3. Clique com o botão direito do mouse na publicação para a qual você quer criar um instantâneo e, então, clique em Exibir Status do Agente de Instantâneo.

  4. Na caixa de diálogo Exibir Status do Agente de Instantâneo - <Publicação>, clique em Iniciar.

Quando Agente de Instantâneo terminar de gerar o instantâneo, uma mensagem será exibida, tal como "[100%] Um instantâneo de 17 artigo(s) foi gerado."

Para criar um instantâneo no Replication Monitor

  1. No Replication Monitor, expanda um Grupo do publicador no painel esquerdo e, depois, expanda um Publicador.

  2. Clique com o botão direito do mouse na publicação para a qual você quer gerar um instantâneo e, então, clique em Gerar Instantâneo.

  3. Para exibir o status do Agente de Instantâneo, clique na guia Agentes. Para obter informações mais detalhadas, clique com o botão direito do mouse no Agente de Instantâneo na grade e, então, clique em Exibir Detalhes.

Para aplicar um instantâneo

  • Depois que um instantâneo for gerado, ele é aplicado pela sincronização da assinatura com o Agente de Distribuição ou Agente de Mesclagem:

    • Se o agente é definido para ser executado continuamente (o padrão para replicação transacional), o instantâneo é automaticamente aplicado após ser gerado.

    • Se o agente tiver execução agendada, o instantâneo será aplicado na próxima execução agendada do agente.

    • Se o agente tiver execução sob demanda, o instantâneo será aplicado na próxima vez que você executar o agente.

    Para obter mais informações sobre assinaturas de sincronização, consulte Sincronizar uma assinatura push e Sincronizar uma assinatura pull.

Ícone de seta usado com o link Voltar ao Início[Top]

Usando Transact-SQL

Instantâneos iniciais podem ser criados de forma programada criando e executando um trabalho do Agente de Instantâneo ou executando o arquivo executável do Agente de Instantâneo 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 Agente de Instantâneo 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.

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

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

Para criar e executar um trabalho do Agente de Instantâneo 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 Crie uma publicaçã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 Agente de Instantâneo é 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 Agente de Instantâneo. Para obter mais informações, consulte Especificar agendas de sincronizaçã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. Você deve criptografar a conexão entre o Publicador e seu Distribuidor remoto antes de executar esse procedimento armazenado. Para obter mais informações, consulte Habilitar conexões criptografadas no Mecanismo de Banco de Dados (SQL Server Configuration Manager).

  3. Adicione artigos à publicação. Para obter mais informações, consulte Defina um Artigo.

  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 Agente de Instantâneo para gerar o instantâneo inicial.

  1. Crie uma publicação de instantâneo, transacional ou de mesclagem. Para obter mais informações, consulte Crie uma publicação.

  2. Adicione artigos à publicação. Para obter mais informações, consulte Defina um Artigo.

  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

Exemplos (Transact-SQL)

Esse exemplo mostra como criar uma publicação transacional e adicionar um trabalho do Agente de Instantâneo 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'AdventureWorks2012'; --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 [AdventureWorks2012]
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 Agente de Instantâneo (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'AdventureWorks2012'; 
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

Os seguintes argumentos de linha de comando iniciam o Agente de Instantâneo 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=AdventureWorks2012 
SET Publication=AdvWorksSalesOrdersMerge 

REM --Start the Snapshot Agent to generate the snapshot for AdvWorksSalesOrdersMerge.
"C:\Program Files\Microsoft SQL Server\110\COM\SNAPSHOT.EXE" -Publication %Publication% 
-Publisher %Publisher% -Distributor %Publisher% -PublisherDB %PublicationDB% 
-ReplicationType 2 -OutputVerboseLevel 1 -DistributorSecurityMode 1 

Ícone de seta usado com o link Voltar ao Início[Top]

Usando o RMO (Replication Management Objects)

O Agente de Instantâneo gera instantâneos depois da criação da publicação. É possível gerar esses instantâneos de forma programada usando o RMO (Replication Management Objects) e o acesso de código direto para as funcionalidades do agente de replicação. Os objetos usados dependem do tipo de replicação. O Agente de Instantâneo pode ser iniciado usando o objeto SnapshotGenerationAgent ou usando de forma assíncrona o trabalho do agente. Depois da geração do instantâneo inicial, ele é transferido para o Assinante, onde é aplicado quando a assinatura é sincronizada pela primeira vez. Será necessário executar novamente o agente sempre que o instantâneo existente não mais contiver dados válidos e atualizados. Para obter mais informações, consulte Manter publicações.

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

Quando possível, solicite aos usuários que insiram as credenciais de segurança em tempo de execução. Se for preciso armazenar credenciais, use os serviços criptográficos fornecidos pelo Microsoft .NET Framework do Windows.

Para gerar o instantâneo inicial de uma publicação de instantâneo ou transacional por meio da iniciação do trabalho do Agente de Instantâneo (assíncrono)

  1. Crie uma conexão com o Publicador usando a classe ServerConnection.

  2. Crie uma instância da classe TransPublication. Defina as propriedades Name e DatabaseName para a publicação, e a propriedade ConnectionContext para a conexão criada na etapa 1.

  3. Chame o método LoadProperties para carregar as propriedades remanescentes do objeto. Se esse método retornar false, as propriedades de publicação na etapa 2 foram definidas incorretamente ou a publicação não existe.

  4. Se o valor de SnapshotAgentExists for false, chame CreateSnapshotAgent para criar o trabalho do Agente de Instantâneo para essa publicação.

  5. Chame o método StartSnapshotGenerationAgentJob para iniciar o trabalho de agente que gera o instantâneo para essa publicação.

  6. (Opcional) Quando o valor de SnapshotAvailable for true, o instantâneo estará disponível a Assinantes.

Para gerar o instantâneo inicial de uma publicação de instantâneo ou transacional por meio da execução do Agente de Instantâneo (síncrono)

  1. Crie uma instância da classe SnapshotGenerationAgent e defina as seguintes propriedades necessárias:

  2. Defina um valor de Transactional ou Snapshot para ReplicationType.

  3. Chame o método GenerateSnapshot.

Para gerar o instantâneo inicial para uma publicação de mesclagem iniciando o trabalho do Agente de Instantâneo (assíncrono)

  1. Crie uma conexão com o Publicador usando a classe ServerConnection.

  2. Crie uma instância da classe MergePublication. Defina as propriedades Name e DatabaseName para a publicação, e a propriedade ConnectionContext para a conexão criada na etapa 1.

  3. Chame o método LoadProperties para carregar as propriedades remanescentes do objeto. Se esse método retornar false, as propriedades de publicação na etapa 2 foram definidas incorretamente ou a publicação não existe.

  4. Se o valor de SnapshotAgentExists for false, chame CreateSnapshotAgent para criar o trabalho do Agente de Instantâneo para essa publicação.

  5. Chame o método StartSnapshotGenerationAgentJob para iniciar o trabalho de agente que gera o instantâneo para essa publicação.

  6. (Opcional) Quando o valor de SnapshotAvailable for true, o instantâneo estará disponível a Assinantes.

Para gerar o instantâneo inicial de uma publicação de mesclagem pela execução do Agente de Instantâneo (síncrono)

  1. Crie uma instância da classe SnapshotGenerationAgent e defina as seguintes propriedades necessárias:

  2. Defina um valor de Merge para ReplicationType.

  3. Chame o método GenerateSnapshot.

Exemplos (RMO)

Esse exemplo executa o Agente de Instantâneo sincronicamente para gerar o instantâneo inicial para uma publicação transacional.

           // Set the Publisher, publication database, and publication names.
            string publicationName = "AdvWorksProductTran";
            string publicationDbName = "AdventureWorks2012";
            string publisherName = publisherInstance;
            string distributorName = publisherInstance;

            SnapshotGenerationAgent agent;

            try
            {
                // Set the required properties for Snapshot Agent.
                agent = new SnapshotGenerationAgent();
                agent.Distributor = distributorName;
                agent.DistributorSecurityMode = SecurityMode.Integrated;
                agent.Publisher = publisherName;
                agent.PublisherSecurityMode = SecurityMode.Integrated;
                agent.Publication = publicationName;
                agent.PublisherDatabase = publicationDbName;
                agent.ReplicationType = ReplicationType.Transactional;

                // Start the agent synchronously.
                agent.GenerateSnapshot();

            }
            catch (Exception ex)
            {
                // Implement custom application error handling here.
                throw new ApplicationException(String.Format(
                    "A snapshot could not be generated for the {0} publication."
                    , publicationName), ex);
            }
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"
Dim publisherName As String = publisherInstance
Dim distributorName As String = publisherInstance

Dim agent As SnapshotGenerationAgent

Try
    ' Set the required properties for Snapshot Agent.
    agent = New SnapshotGenerationAgent()
    agent.Distributor = distributorName
    agent.DistributorSecurityMode = SecurityMode.Integrated
    agent.Publisher = publisherName
    agent.PublisherSecurityMode = SecurityMode.Integrated
    agent.Publication = publicationName
    agent.PublisherDatabase = publicationDbName
    agent.ReplicationType = ReplicationType.Transactional

    ' Start the agent synchronously.
    agent.GenerateSnapshot()

Catch ex As Exception
    ' Implement custom application error handling here.
    Throw New ApplicationException(String.Format( _
     "A snapshot could not be generated for the {0} publication." _
     , publicationName), ex)
End Try

Esse exemplo inicia de forma assíncrona o trabalho do agente sincronicamente para gerar o instantâneo inicial para uma publicação transacional.

         // Set the Publisher, publication database, and publication names.
            string publicationName = "AdvWorksProductTran";
            string publicationDbName = "AdventureWorks2012";
            string publisherName = publisherInstance;

            TransPublication publication;

            // Create a connection to the Publisher using Windows Authentication.
            ServerConnection conn;
            conn = new ServerConnection(publisherName);

            try
            {
                // Connect to the Publisher.
                conn.Connect();

                // Set the required properties for an existing publication.
                publication = new TransPublication();
                publication.ConnectionContext = conn;
                publication.Name = publicationName;
                publication.DatabaseName = publicationDbName;

                if (publication.LoadProperties())
                {
                    // Start the Snapshot Agent job for the publication.
                    publication.StartSnapshotGenerationAgentJob();
                }
                else
                {
                    throw new ApplicationException(String.Format(
                        "The {0} publication does not exist.", publicationName));
                }
            }
            catch (Exception ex)
            {
                // Implement custom application error handling here.
                throw new ApplicationException(String.Format(
                    "A snapshot could not be generated for the {0} publication."
                    , publicationName), ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"
Dim publisherName As String = publisherInstance

Dim publication As TransPublication

' Create a connection to the Publisher using Windows Authentication.
Dim conn As ServerConnection
conn = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Set the required properties for an existing publication.
    publication = New TransPublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    If publication.LoadProperties() Then
        ' Start the Snapshot Agent job for the publication.
        publication.StartSnapshotGenerationAgentJob()
    Else
        Throw New ApplicationException(String.Format( _
         "The {0} publication does not exist.", publicationName))
    End If
Catch ex As Exception
    ' Implement custom application error handling here.
    Throw New ApplicationException(String.Format( _
     "A snapshot could not be generated for the {0} publication." _
     , publicationName), ex)
Finally
    conn.Disconnect()
End Try

Ícone de seta usado com o link Voltar ao Início[Top]

Consulte também

Conceitos

Crie uma publicação

Criar uma assinatura pull

Criar uma assinatura push

Especificar agendas de sincronização

Criar e aplicar o instantâneo

Inicializar uma assinatura com um instantâneo

Conceitos de Replication Management Objects

Práticas recomendadas em relação à segurança de replicação

Conceitos dos procedimentos armazenados do sistema de replicação

Usar sqlcmd com variáveis de script