Partager via


Procédure : réinitialiser un abonnement (programmation RMO)

Des abonnements individuels peuvent être marqués pour réinitialisation afin qu'une nouvelle capture instantanée soit appliquée lors de la synchronisation suivante. Les abonnements peuvent être réinitialisés par programme à l'aide d'objets RMO (Replication Management Objects). Les classes que vous utilisez dépendent du type de publication à laquelle l'abonnement appartient et du type d'abonnement (par extraction ou par émission de données).

Pour réinitialiser un abonnement par extraction à une publication transactionnelle

  1. Créez une connexion à l'Abonné en utilisant la classe ServerConnection.

  2. Créez une instance de la classe TransPullSubscription, puis définissez PublicationName, DatabaseName, PublisherName, PublicationDBName et la connexion créée à l'étape 1 pour ConnectionContext.

  3. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet.

    [!REMARQUE]

    Si cette méthode retourne false, les propriétés de l'abonnement définies à l'étape 2 sont incorrectes ou l'abonnement par extraction n'existe pas.

  4. Appelez la méthode Reinitialize. Cette méthode marque l'abonnement pour réinitialisation.

  5. Synchronisez l'abonnement par extraction. Pour plus d'informations, consultez Procédure : synchroniser un abonnement par extraction de données (pull) (Programmation RMO).

Pour réinitialiser un abonnement par émission de données à une publication transactionnelle

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

  2. Créez une instance de la classe TransSubscription, puis définissez PublicationName, DatabaseName, SubscriberName, SubscriptionDBName et la connexion créée à l'étape 1 pour ConnectionContext.

  3. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet.

    [!REMARQUE]

    Si cette méthode retourne false, les propriétés de l'abonnement définies à l'étape 2 sont incorrectes ou l'abonnement par émission de données n'existe pas.

  4. Appelez la méthode Reinitialize. Cette méthode marque l'abonnement pour réinitialisation.

  5. Synchronisez l'abonnement par émission de données. Pour plus d'informations, consultez Procédure : pour synchroniser un abonnement d'envoi de données (programmation RMO).

Pour réinitialiser un abonnement par extraction à une publication de fusion

  1. Créez une connexion à l'Abonné en utilisant la classe ServerConnection.

  2. Créez une instance de la classe MergePullSubscription, puis définissez PublicationName, DatabaseName, PublisherName, PublicationDBName et la connexion créée à l'étape 1 pour ConnectionContext.

  3. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet.

    [!REMARQUE]

    Si cette méthode retourne false, les propriétés de l'abonnement définies à l'étape 2 sont incorrectes ou l'abonnement par extraction n'existe pas.

  4. Appelez la méthode Reinitialize. Passez la valeur true pour télécharger les modifications sur l'Abonné avant la réinitialisation ou la valeur false pour réinitialiser et perdre toute modification en attente sur l'Abonné. Cette méthode marque l'abonnement pour réinitialisation.

    [!REMARQUE]

    Les modifications ne peuvent pas être téléchargées si l'abonnement a expiré. Pour plus d'informations, consultez Un abonnement de fusion a expiré et des modifications doivent être chargées.

  5. Synchronisez l'abonnement par extraction. Pour plus d'informations, consultez Procédure : synchroniser un abonnement par extraction de données (pull) (Programmation RMO).

Pour réinitialiser un abonnement par émission de données à une publication de fusion

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

  2. Créez une instance de la classe MergeSubscription, puis définissez PublicationName, DatabaseName, SubscriberName, SubscriptionDBName et la connexion créée à l'étape 1 pour ConnectionContext.

  3. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet.

    [!REMARQUE]

    Si cette méthode retourne false, les propriétés de l'abonnement définies à l'étape 2 sont incorrectes ou l'abonnement par émission de données n'existe pas.

  4. Appelez la méthode Reinitialize. Passez la valeur true pour télécharger les modifications sur l'Abonné avant la réinitialisation ou la valeur false pour réinitialiser et perdre toute modification en attente sur l'Abonné. Cette méthode marque l'abonnement pour réinitialisation.

    [!REMARQUE]

    Les modifications ne peuvent pas être téléchargées si l'abonnement a expiré. Pour plus d'informations, consultez Un abonnement de fusion a expiré et des modifications doivent être chargées.

  5. Synchronisez l'abonnement par émission de données. Pour plus d'informations, consultez Procédure : pour synchroniser un abonnement d'envoi de données (programmation RMO).

Exemple

Cet exemple réinitialise un abonnement par extraction à une publication transactionnelle.

          // Define server, publication, and database names.
            String subscriberName = subscriberInstance;
            String publisherName = publisherInstance;
            String publicationName = "AdvWorksProductTran";
            String publicationDbName = "AdventureWorks";
            String subscriptionDbName = "AdventureWorksReplica";

            // Create a connection to the Subscriber.
            ServerConnection conn = new ServerConnection(subscriberName);

            TransPullSubscription subscription;

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

                // Define subscription properties.
                subscription = new TransPullSubscription();
                subscription.ConnectionContext = conn;
                subscription.DatabaseName = subscriptionDbName;
                subscription.PublisherName = publisherName;
                subscription.PublicationDBName = publicationDbName;
                subscription.PublicationName = publicationName;

                // If the pull subscription and the job exists, mark the subscription
                // for reinitialization and start the agent job.
                if (subscription.LoadProperties() && subscription.AgentJobId != null)
                {
                    subscription.Reinitialize();
                    subscription.SynchronizeWithJob();
                }
                else
                {
                    // Do something here if the subscription does not exist.
                    throw new ApplicationException(String.Format(
                        "A subscription to '{0}' does not exists on {1}",
                        publicationName, subscriberName));
                }
            }
            catch (Exception ex)
            {
                // Do appropriate error handling here.
                throw new ApplicationException("The subscription could not be reinitialized.", ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks"
Dim subscriptionDbName As String = "AdventureWorksReplica"

' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

Dim subscription As TransPullSubscription

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

    ' Define subscription properties.
    subscription = New TransPullSubscription()
    subscription.ConnectionContext = conn
    subscription.DatabaseName = subscriptionDbName
    subscription.PublisherName = publisherName
    subscription.PublicationDBName = publicationDbName
    subscription.PublicationName = publicationName

    ' If the pull subscription and the job exists, mark the subscription
    ' for reinitialization and start the agent job.
    If subscription.LoadProperties() And (Not subscription.AgentJobId Is Nothing) Then
        subscription.Reinitialize()
        subscription.SynchronizeWithJob()
    Else
        ' Do something here if the subscription does not exist.
        Throw New ApplicationException(String.Format( _
         "A subscription to '{0}' does not exists on {1}", _
         publicationName, subscriberName))
    End If
Catch ex As Exception
    ' Do appropriate error handling here.
    Throw New ApplicationException("The subscription could not be reinitialized.", ex)
Finally
    conn.Disconnect()
End Try

Cet exemple réinitialise un abonnement par extraction à une publication de fusion après avoir téléchargé les modifications en attente sur l'Abonné.

         // Define server, publication, and database names.
            String subscriberName = subscriberInstance;
            String publisherName = publisherInstance;
            String publicationName = "AdvWorksSalesOrdersMerge";
            String publicationDbName = "AdventureWorks";
            String subscriptionDbName = "AdventureWorksReplica";

            // Create a connection to the Subscriber.
            ServerConnection conn = new ServerConnection(subscriberName);

            MergePullSubscription subscription;

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

                // Define subscription properties.
                subscription = new MergePullSubscription();
                subscription.ConnectionContext = conn;
                subscription.DatabaseName = subscriptionDbName;
                subscription.PublisherName = publisherName;
                subscription.PublicationDBName = publicationDbName;
                subscription.PublicationName = publicationName;

                // If the pull subscription and the job exists, mark the subscription
                // for reinitialization after upload and start the agent job.
                if (subscription.LoadProperties() && subscription.AgentJobId != null)
                {
                    subscription.Reinitialize(true);
                    subscription.SynchronizeWithJob();
                }
                else
                {
                    // Do something here if the subscription does not exist.
                    throw new ApplicationException(String.Format(
                        "A subscription to '{0}' does not exists on {1}",
                        publicationName, subscriberName));
                }
            }
            catch (Exception ex)
            {
                // Do appropriate error handling here.
                throw new ApplicationException("The subscription could not be synchronized.", ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks"
Dim subscriptionDbName As String = "AdventureWorksReplica"

' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)

Dim subscription As MergePullSubscription

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

    ' Define subscription properties.
    subscription = New MergePullSubscription()
    subscription.ConnectionContext = conn
    subscription.DatabaseName = subscriptionDbName
    subscription.PublisherName = publisherName
    subscription.PublicationDBName = publicationDbName
    subscription.PublicationName = publicationName

    ' If the pull subscription and the job exists, mark the subscription
    ' for reinitialization after upload and start the agent job.
    If subscription.LoadProperties() And (Not subscription.AgentJobId Is Nothing) Then
        subscription.Reinitialize(True)
        subscription.SynchronizeWithJob()
    Else
        ' Do something here if the subscription does not exist.
        Throw New ApplicationException(String.Format( _
         "A subscription to '{0}' does not exists on {1}", _
         publicationName, subscriberName))
    End If
Catch ex As Exception
    ' Do appropriate error handling here.
    Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
    conn.Disconnect()
End Try