Como criar o instantâneo inicial (Programação RMO)
O Snapshot Agent 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 Snapshot Agent 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 Mantendo publicações.
As 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 RMO).
Observaçã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 preciso armazenar credenciais, use os serviços criptográficos fornecidos pelo Microsoft Windows .NET Framework. |
Para gerar o instantâneo inicial de uma publicação de instantâneo ou transacional por meio da iniciação do trabalho do Snapshot Agent (assíncrono)
Crie uma conexão com o Publicador usando a classe ServerConnection.
Crie uma instância da classe TransPublication. Defina as propriedades Name e DatabaseName para a publicação, depois defina a propriedade ConnectionContext para a conexão criada na Etapa 1.
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.
Se o valor de SnapshotAgentExists for false, chame CreateSnapshotAgent para criar o trabalho do Snapshot Agent para essa publicação.
Chame o método StartSnapshotGenerationAgentJob para iniciar o trabalho de agente que gera o instantâneo para essa publicação.
(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 Snapshot Agent (síncrono)
Crie uma instância da classe SnapshotGenerationAgent 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 para conexão com o Publicador ou um valor de Standard e valores de PublisherLogin e PublisherPassword para usar a Autenticação do SQL Server em conexões com o Publicador. A Autenticação do Windows é recomendável.
DistributorSecurityMode - valor de Integrated para usar a Autenticação do Windows para conexão com o Distribuidor ou um valor de Standard e valores de DistributorLogin e DistributorPassword para usar a Autenticação do SQL Server para conexão com o Distribuidor. A Autenticação do Windows é recomendável.
Defina um valor de Transactional ou Snapshot para ReplicationType.
Chame o método GenerateSnapshot.
Para gerar o instantâneo inicial para uma publicação de mesclagem iniciando o trabalho do Snapshot Agent (assíncrono)
Crie uma conexão com o Publicador usando a classe ServerConnection.
Crie uma instância da classe MergePublication. Defina as propriedades Name e DatabaseName para a publicação, depois defina a propriedade ConnectionContext para a conexão criada na Etapa 1.
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.
Se o valor de SnapshotAgentExists for false, chame CreateSnapshotAgent para criar o trabalho do Snapshot Agent para essa publicação.
Chame o método StartSnapshotGenerationAgentJob para iniciar o trabalho de agente que gera o instantâneo para essa publicação.
(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 Snapshot Agent (síncrono)
Crie uma instância da classe SnapshotGenerationAgent 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 para conexão com o Publicador ou um valor de Standard e valores de PublisherLogin e PublisherPassword para usar a Autenticação do SQL Server em conexões com o Publicador. A Autenticação do Windows é recomendável.
DistributorSecurityMode - valor de Integrated para usar a Autenticação do Windows para conexão com o Distribuidor ou um valor de Standard e valores de DistributorLogin e DistributorPassword para usar a Autenticação do SQL Server em conexões com o Distribuidor. A Autenticação do Windows é recomendável.
Defina um valor de Merge para ReplicationType.
Chame o método GenerateSnapshot.
Exemplo
Esse exemplo executa o Snapshot Agent 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 = "AdventureWorks2008R2";
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 = "AdventureWorks2008R2"
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 = "AdventureWorks2008R2";
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 = "AdventureWorks2008R2"
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