Procédure : créer la capture instantanée initiale (programmation RMO)

L'Agent de capture instantanée génère des captures instantanées après qu'une publication a été créée. Vous pouvez générer ces captures instantanées par programme en utilisant les objets RMO (Replication Management Objects) et l'accès direct par code managé aux fonctionnalités de l'Agent de réplication. Les objets à utiliser dépendent du type de réplication. L'Agent de capture instantanée peut être démarré de façon synchrone à l'aide de l'objet SnapshotGenerationAgent ou de façon asynchrone à l'aide du travail de l'agent. Une fois la capture instantanée initiale générée, elle est transférée et appliquée sur l'Abonné lorsque l'abonnement est synchronisé pour la première fois. Vous devrez exécuter de nouveau l'agent chaque fois que la capture instantanée existante ne contiendra plus de données valides à jour. Pour plus d'informations, consultez Gestion des publications.

Les publications de fusion qui utilisent des filtres paramétrés nécessitent une capture instantanée en deux parties. Pour plus d'informations, consultez Procédure : créer une capture instantanée pour une publication de fusion avec des filtres paramétrables (programmation RMO).

Remarque relative à la sécuritéRemarque relative à la sécurité

Si possible, demandez aux utilisateurs de fournir les informations d'identification de sécurité au moment de l'exécution. Si vous devez stocker des informations d'identification, utilisez les services de chiffrement fournis par Microsoft Windows .NET Framework.

Pour générer la capture instantanée initiale pour une publication transactionnelle ou de capture instantanée en démarrant le travail de l'Agent de capture instantanée (asynchrone)

  1. Créez une connexion au serveur de publication en utilisant la classe ServerConnection.

  2. Créez une instance de la classe TransPublication. Définissez les propriétés Name et DatabaseName de la publication, et définissez la propriété ConnectionContext avec la connexion créée à l'étape 1.

  3. Appelez la méthode LoadProperties pour charger les propriétés restantes de l'objet. Si cette méthode retourne false, soit les propriétés de la publication ont été définies de manière incorrecte à l'étape 2, soit la publication n'existe pas.

  4. Si SnapshotAgentExists a la valeur false, appelez CreateSnapshotAgent pour créer le travail de l'Agent de capture instantanée pour cette publication.

  5. Appelez la méthode StartSnapshotGenerationAgentJob pour démarrer le travail de l'agent qui génère la capture instantanée pour cette publication.

  6. (Facultatif) Lorsque SnapshotAvailable a la valeur true, la capture instantanée est à la disposition des Abonnés.

Pour générer la capture instantanée initiale pour une publication transactionnelle ou de capture instantanée en exécutant l'Agent de capture instantanée (synchrone)

  1. Créez une instance de la classe SnapshotGenerationAgent et définissez les propriétés requises suivantes :

  2. Spécifiez la valeur Transactional ou Snapshot pour ReplicationType.

  3. Appelez la méthode GenerateSnapshot.

Pour générer la capture instantanée initiale pour une publication de fusion en démarrant le travail de l'Agent de capture instantanée (asynchrone)

  1. Créez une connexion au serveur de publication en utilisant la classe ServerConnection.

  2. Créez une instance de la classe MergePublication. Définissez les propriétés Name et DatabaseName de la publication, et définissez la propriété ConnectionContext avec la connexion créée à l'étape 1.

  3. Appelez la méthode LoadProperties pour charger les propriétés restantes de l'objet. Si cette méthode retourne false, soit les propriétés de la publication ont été définies de manière incorrecte à l'étape 2, soit la publication n'existe pas.

  4. Si SnapshotAgentExists a la valeur false, appelez CreateSnapshotAgent pour créer le travail de l'Agent de capture instantanée pour cette publication.

  5. Appelez la méthode StartSnapshotGenerationAgentJob pour démarrer le travail de l'agent qui génère la capture instantanée pour cette publication.

  6. (Facultatif) Lorsque SnapshotAvailable a la valeur true, la capture instantanée est à la disposition des Abonnés.

Pour générer la capture instantanée initiale pour une publication de fusion en exécutant l'Agent de capture instantanée (synchrone)

  1. Créez une instance de la classe SnapshotGenerationAgent et définissez les propriétés requises suivantes :

  2. Spécifiez la valeur Merge pour ReplicationType.

  3. Appelez la méthode GenerateSnapshot.

Exemple

Cet exemple exécute de façon synchrone l'Agent de capture instantanée pour générer la capture instantanée initiale pour une publication transactionnelle.

         // 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

Cet exemple démarre de façon asynchrone le travail de l'agent pour générer la capture instantanée initiale pour une publication transactionnelle.

           // 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