Cómo crear la instantánea inicial (programación con RMO)
El Agente de instantáneas genera instantáneas una vez creada la publicación. Puede generar estas instantáneas mediante programación con los objetos de administración de replicación (RMO) y el acceso de código administrado directo a las funcionalidades del agente de replicación. Los objetos que se usan dependen del tipo de replicación. El Agente de instantáneas se puede iniciar sincrónicamente con el objeto SnapshotGenerationAgent o de forma asincrónica con el trabajo de agente. Una vez generada la instantánea inicial, se transfiere y se aplica al suscriptor cuando se sincroniza la suscripción por primera vez. Deberá volver a ejecutar el agente cada vez que la instantánea existente no contenga datos válidos y actualizados. Para obtener más información, vea Mantener publicaciones.
Las publicaciones de mezcla que usan 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 con RMO).
Nota de seguridad |
---|
Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales, use los servicios de cifrado proporcionados por Microsoft Windows .NET Framework. |
Para generar la instantánea inicial de una publicación transaccional o de instantáneas iniciando el trabajo del Agente de instantáneas (asincrónico)
Cree una conexión al publicador mediante la clase ServerConnection.
Cree una instancia de la clase TransPublication. Establezca las propiedades Name y DatabaseName para la publicación y la propiedad ConnectionContext en la conexión creada en el paso 1.
Llame al método LoadProperties para cargar las propiedades restantes del objeto. Si este método devuelve false, significa que las propiedades de la publicación del paso 2 se definieron incorrectamente, o bien que la publicación no existe.
Si el valor de SnapshotAgentExists es false, llame a CreateSnapshotAgent para crear el trabajo de Agente de instantáneas para esta publicación.
Llame al método StartSnapshotGenerationAgentJob para iniciar el trabajo del agente que genera la instantánea inicial de esta publicación.
(Opcional) Cuando el valor de SnapshotAvailable es true, la instantánea está disponible para los suscriptores.
Para generar la instantánea inicial de una publicación transaccional o de instantáneas ejecutando el trabajo del Agente de instantáneas (sincrónico)
Cree una instancia de la clase SnapshotGenerationAgent y establezca las propiedades necesarias siguientes:
Publisher - nombre del publicador
PublisherDatabase - nombre de la base de datos de publicación
Publication - nombre de la publicación
Distributor - nombre del distribuidor
PublisherSecurityMode- un valor de Integrated para usar la autenticación de Windows al conectarse al publicador o un valor de Standard y valores para PublisherLogin y PublisherPassword para usar la autenticación de SQL Server al conectarse al publicador. Se recomienda la autenticación de Windows.
DistributorSecurityMode- un valor de Integrated para usar la autenticación de Windows al conectarse al publicador o un valor de Standard y valores para DistributorLogin y DistributorPassword para usar la autenticación de SQL Server al conectarse al publicador. Se recomienda la autenticación de Windows.
Establezca un valor de Transactional o Snapshot para ReplicationType.
Llame al método GenerateSnapshot.
Para generar la instantánea inicial de una publicación de mezcla iniciando el trabajo del Agente de instantáneas (asincrónico)
Cree una conexión al publicador mediante la clase ServerConnection.
Cree una instancia de la clase MergePublication. Establezca las propiedades Name y DatabaseName para la publicación y la propiedad ConnectionContext en la conexión creada en el paso 1.
Llame al método LoadProperties para cargar las propiedades restantes del objeto. Si este método devuelve false, significa que las propiedades de la publicación del paso 2 se definieron incorrectamente, o bien que la publicación no existe.
Si el valor de SnapshotAgentExists es false, llame a CreateSnapshotAgent para crear el trabajo de Agente de instantáneas para esta publicación.
Llame al método StartSnapshotGenerationAgentJob para iniciar el trabajo del agente que genera la instantánea inicial de esta publicación.
(Opcional) Cuando el valor de SnapshotAvailable es true, la instantánea está disponible para los suscriptores.
Para generar la instantánea inicial de una publicación de mezcla ejecutando el Agente de instantáneas (sincrónico)
Cree una instancia de la clase SnapshotGenerationAgent y establezca las propiedades necesarias siguientes:
Publisher - nombre del publicador
PublisherDatabase - nombre de la base de datos de publicación
Publication - nombre de la publicación
Distributor - nombre del distribuidor
PublisherSecurityMode- un valor de Integrated para usar la autenticación de Windows al conectarse al publicador o un valor de Standard y valores para PublisherLogin y PublisherPassword para usar la autenticación de SQL Server al conectarse al publicador. Se recomienda la autenticación de Windows.
DistributorSecurityMode - un valor de Integrated para usar la autenticación de Windows al conectarse al distribuidor o un valor de Standard y valores para DistributorLogin y DistributorPassword para usar la autenticación de SQL Server al conectarse al distribuidor. Se recomienda la autenticación de Windows.
Establezca un valor Merge para ReplicationType.
Llame al método GenerateSnapshot.
Ejemplo
Este ejemplo ejecuta sincrónicamente el Agente de instantáneas para generar la instantánea inicial de una publicación transaccional.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks";
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 = "AdventureWorks"
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 ejemplo inicia asincrónicamente el Agente de instantáneas para generar la instantánea inicial de una publicación transaccional.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks";
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 = "AdventureWorks"
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