Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico descreve como criar e aplicar o instantâneo inicial no SQL Server 2014 usando o SQL Server Management Studio, o Transact-SQL ou o RMO (Replication Management Objects). As publicações de mesclagem que usam filtros parametrizados exigem um instantâneo dividido em duas partes. Para obter mais informações, consulte Criar um snapshot para uma publicação de mesclagem com filtros parametrizados.
Nesse Tópico
Para criar e aplicar o instantâneo inicial, utilize:
Como usar o SQL Server Management Studio.
Por padrão, se o SQL Server Agent estiver em execução, um instantâneo será gerado pelo Snapshot Agent imediatamente após a criação de uma publicação com o Assistente de Nova Publicação. Por padrão, ele é aplicado pelo Agente de Distribuição (para replicação instantânea e transacional) ou 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
Conecte-se ao Publicador no Management Studio e expanda o nó do servidor.
Expanda a pasta Replicação e expanda a pasta Publicações Locais .
Clique com o botão direito do mouse na publicação para a qual você deseja criar um instantâneo e clique em Exibir Status do Agente de Instantâneo.
Na caixa de diálogo Visualizar Status do Agente de Instantâneo – <Publicação>, clique em Iniciar.
Quando o Snapshot Agent terminar de gerar o instantâneo, uma mensagem será exibida, como "[100%] Um instantâneo de 17 artigos foi gerado".
Para criar um instantâneo no Replication Monitor
No Replication Monitor, expanda um grupo do Publisher no painel esquerdo e, em seguida, expanda um Publisher.
Clique com o botão direito do mouse na publicação para a qual você deseja gerar um instantâneo e clique em Gerar Instantâneo.
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 clique em Exibir Detalhes.
Para aplicar um instantâneo
Depois que o instantâneo é gerado, ele é aplicado sincronizando a assinatura com o Agente de Distribuição ou o Agente de Mesclagem:
Se o agente estiver definido para ser executado continuamente (o padrão para replicação transacional), o instantâneo será aplicado automaticamente depois de gerado.
Se o agente estiver definido para ser executado em um agendamento, o instantâneo será aplicado na próxima vez que o agente for agendado para ser executado.
Se o agente estiver definido para ser executado sob demanda, ele será aplicado na próxima vez que você executar o agente.
Para obter mais informações sobre como sincronizar assinaturas, consulte Synchronize a Push Subscription and Synchronize a Pull Subscription.
Usando Transact-SQL
Os instantâneos iniciais podem ser criados programaticamente criando e executando um trabalho do Snapshot Agent ou executando o arquivo executável do Snapshot Agent de um arquivo em lote. Depois que um instantâneo inicial é gerado, ele é transferido e aplicado no assinante na primeira vez que a assinatura é sincronizada. Se você executar o Snapshot Agent a partir de um prompt de comando ou de um arquivo em lote, precisará rerexecutar o agente sempre que o instantâneo existente se tornar inválido.
Importante
Quando possível, solicite aos usuários que insiram credenciais de segurança no runtime. Se você precisar armazenar credenciais em um arquivo de script, deverá proteger o arquivo para impedir o acesso não autorizado.
Para criar e executar um trabalho do Snapshot Agent para gerar o instantâneo inicial
Crie um instantâneo, uma publicação transacional ou de mesclagem. Para obter mais informações, consulte Criar uma publicação.
Execute sp_addpublication_snapshot (Transact-SQL). Especifique @publication e os seguintes parâmetros:
O @job_login. que especifica as credenciais de Autenticação do Windows sob as quais o Agente de Instantâneo é executado no Distribuidor.
**O @job_password**, que é a senha para as credenciais fornecidas do Windows.
(Opcional) Um valor 0 para @publisher_security_mode se o agente usar a Autenticação do SQL Server ao se conectar ao Publicador. Nesse caso, você também deve especificar as informações de logon da Autenticação do SQL Server para @publisher_login e @publisher_password.
(Opcional) Um agendamento de sincronização para o trabalho do Snapshot Agent. Para obter mais informações, consulte Especificar Agendamentos de Sincronização.
Importante
Ao configurar um Publicador com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, incluindo 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, confira Habilitar conexões criptografadas para o mecanismo de banco de dados (SQL Server Configuration Manager).
Adicione artigos à publicação. Para obter mais informações, consulte Define an Article.
No Publicador do banco de dados de publicação, execute sp_startpublication_snapshot (Transact-SQL), especificando o valor de @publication da etapa 1.
Para executar o Snapshot Agent para gerar o instantâneo inicial
Crie um instantâneo, uma publicação transacional ou de mesclagem. Para obter mais informações, consulte Criar uma publicação.
Adicione artigos à publicação. Para obter mais informações, consulte Define an Article.
No 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:
-Publicação
-Publicador
-Distribuidor
-PublisherDB
-ReplicationType
Se você estiver usando a Autenticação do SQL Server, também deverá especificar os seguintes argumentos:
-DistributorLogin
-DistributorPassword
-DistributorSecurityMode = 0
-PublisherLogin
-PublisherPassword
-PublisherSecurityMode = 0
Exemplos (Transact-SQL)
Este 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'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
Este exemplo cria uma publicação de mesclagem e adiciona um trabalho do Snapshot Agent (usando variáveis sqlcmd ) para a publicação. Este 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 argumentos de linha de comando a seguir iniciam o Agente de Instantâneo para gerar o instantâneo de uma publicação de mesclagem.
Observação
Quebras de linha foram adicionadas para melhorar a legibilidade. Em um arquivo em lote, os comandos devem ser feitos em uma única linha.
@ECHO OFF
SET InstanceName=%computername%
REM<snippetstartmergesnapshot_10>
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\120\COM\SNAPSHOT.EXE" -Publication %Publication%
-Publisher %Publisher% -Distributor %Publisher% -PublisherDB %PublicationDB%
-ReplicationType 2 -OutputVerboseLevel 1 -DistributorSecurityMode 1
REM</snippetstartmergesnapshot_10>
PAUSE
Usando Objetos de Gerenciamento de Replicação (RMO)
O Snapshot Agent gera instantâneos depois que uma publicação é criada. Você pode gerar esses instantâneos programaticamente usando RMO (Replication Management Objects) e acesso direto de código gerenciado às funcionalidades do agente de replicação. Os objetos que você usa dependem do tipo de replicação. O Snapshot Agent pode ser iniciado de forma síncrona usando o SnapshotGenerationAgent objeto ou de forma assíncrona usando o trabalho do agente. Depois que o instantâneo inicial é gerado, ele é transferido e aplicado ao Assinante quando a assinatura é sincronizada pela primeira vez. Você precisará reexecutar o agente sempre que o instantâneo existente não mais contiver dados válidos até a data up-to. Para obter mais informações, consulte Manter Publicações.
Importante
Quando possível, solicite aos usuários que insiram credenciais de segurança no runtime. Se você precisar armazenar credenciais, use os serviços criptográficos fornecidos pelo Microsoft Windows .NET Framework.
Para gerar o instantâneo inicial para um instantâneo ou publicação transacional iniciando o trabalho do Snapshot Agent (assíncrono)
Crie uma conexão com o Publicador usando a classe ServerConnection .
Criar uma instância da classe TransPublication. Defina as Name propriedades e DatabaseName as propriedades da publicação e defina a ConnectionContext propriedade como a conexão criada na etapa 1.
Chame o LoadProperties método para carregar as propriedades restantes do objeto. Se esse método retornar
false, as propriedades da publicação na etapa 2 foram definidas incorretamente ou a publicação não existe.Se o valor for SnapshotAgentExists
false, chame CreateSnapshotAgent para criar o trabalho do agente de instantâneo para esta publicação.Chame o método StartSnapshotGenerationAgentJob para iniciar o trabalho do agente que gera o instantâneo para esta publicação.
(Opcional) Quando o valor é SnapshotAvailable
true, o instantâneo está disponível para Assinantes.
Para gerar o instantâneo inicial para um instantâneo ou publicação transacional executando o Snapshot Agent (síncrono)
Crie uma instância da SnapshotGenerationAgent classe e defina as seguintes propriedades necessárias:
Publisher - nome do Publicador
PublisherDatabase - nome do banco de dados de publicação
Publication - nome da publicação
Distributor - nome do Distribuidor
PublisherSecurityMode – um valor Integrated para usar a autenticação do Windows ao se conectar ao Publicador ou um valor Standard juntamente com valores PublisherLogin e PublisherPassword para usar a autenticação do SQL Server ao se conectar ao Publicador. A Autenticação do Windows é recomendada.
DistributorSecurityMode – um valor de Integrated para usar a Autenticação do Windows ao se conectar ao Distribuidor, ou um valor de Standard com valores para DistributorLogin e DistributorPassword para usar a Autenticação do SQL Server ao se conectar ao Distribuidor. A Autenticação do Windows é recomendada.
Definir um valor de Transactional ou Snapshot para ReplicationType.
Chame o método GenerateSnapshot .
Para gerar o instantâneo inicial de uma publicação de mesclagem iniciando o trabalho do Snapshot Agent (assíncrono)
Crie uma conexão com o Publicador usando a classe ServerConnection .
Criar uma instância da classe MergePublication. Defina as propriedades Name e DatabaseName para a publicação e defina a propriedade ConnectionContext como a conexão criada na etapa 1.
Chame o LoadProperties método para carregar as propriedades restantes do objeto. Se esse método retornar
false, as propriedades da publicação na etapa 2 foram definidas incorretamente ou a publicação não existe.Se o valor for SnapshotAgentExists
false, chame CreateSnapshotAgent para criar o trabalho do agente de instantâneo para esta publicação.Chame o método StartSnapshotGenerationAgentJob para iniciar o trabalho do agente que gera o instantâneo para esta publicação.
(Opcional) Quando o valor de SnapshotAvailable é
true, o instantâneo está disponível para Assinantes.
Para gerar o instantâneo inicial para uma publicação de mesclagem executando o Snapshot Agent (síncrono)
Crie uma instância da SnapshotGenerationAgent classe e defina as seguintes propriedades necessárias:
Publisher - nome do Publicador
PublisherDatabase - nome do banco de dados de publicação
Publication - nome da publicação
Distributor - nome do Distribuidor
PublisherSecurityMode – um valor de Integrated para usar a Autenticação do Windows ao se conectar ao Publicador ou um valor de Standard e valores para PublisherLogin e PublisherPassword para usar a Autenticação do SQL Server ao se conectar ao Publicador. A Autenticação do Windows é recomendada.
DistributorSecurityMode – um valor de Integrated para usar a Autenticação do Windows ao se conectar ao Distribuidor ou um valor de Standard e valores para DistributorLogin e DistributorPassword para usar a Autenticação do SQL Server ao se conectar ao Distribuidor. A Autenticação do Windows é recomendada.
Defina um valor para MergeReplicationType.
Chame o método GenerateSnapshot .
Exemplos (RMO)
Este exemplo executa de forma síncrona o Snapshot Agent para gerar o instantâneo inicial de 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
Este exemplo inicia de forma assíncrona o trabalho do agente para gerar o instantâneo inicial de 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
Consulte Também
Criar uma publicação
Criar uma Assinatura de Pull
Criar uma Assinatura Push
Especificar agendas de sincronização
Criar e aplicar o instantâneo
Inicializar uma assinatura com uma foto instantânea
Conceitos de Objetos de Gerenciamento de Replicação
Práticas recomendadas de segurança de replicação
Conceitos de procedimentos armazenados do sistema de replicação
Usar sqlcmd com variáveis de script