Condividi tramite


Procedura: Reinizializzazione di una sottoscrizione (programmazione RMO)

È possibile contrassegnare singole sottoscrizioni per la reinizializzazione in modo che nel corso della successiva sincronizzazione venga applicato un nuovo snapshot. Le sottoscrizioni possono essere reinizializzate a livello di programmazione tramite gli oggetti RMO (Replication Management Objects). Le classi utilizzate dipendono dal tipo di pubblicazione a cui appartiene la sottoscrizione e dal tipo di sottoscrizione, ovvero push o pull.

Per reinizializzare una sottoscrizione pull in una pubblicazione transazionale

  1. Creare una connessione al Sottoscrittore tramite la classe ServerConnection.

  2. Creare un'istanza della classe TransPullSubscription, quindi impostare PublicationName, DatabaseName, PublisherName, PublicationDBName e la connessione ottenuta al passaggio 1 per ConnectionContext.

  3. Chiamare il metodo LoadProperties per ottenere le proprietà dell'oggetto.

    [!NOTA]

    Se questo metodo restituisce false, le proprietà di sottoscrizione sono state definite in modo non corretto nel passaggio 2 oppure la sottoscrizione pull non esiste.

  4. Chiamare il metodo Reinitialize. Questo metodo contrassegna la sottoscrizione per la reinizializzazione.

  5. Sincronizzare la sottoscrizione pull. Per ulteriori informazioni, vedere Procedura: Sincronizzazione di una sottoscrizione pull (programmazione RMO).

Per reinizializzare una sottoscrizione push in una pubblicazione transazionale

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection.

  2. Creare un'istanza della classe TransSubscription, quindi impostare PublicationName, DatabaseName, SubscriberName, SubscriptionDBName e la connessione ottenuta al passaggio 1 per ConnectionContext.

  3. Chiamare il metodo LoadProperties per ottenere le proprietà dell'oggetto.

    [!NOTA]

    Se questo metodo restituisce false, le proprietà di sottoscrizione sono state definite in modo non corretto nel passaggio 2 oppure la sottoscrizione push non esiste.

  4. Chiamare il metodo Reinitialize. Questo metodo contrassegna la sottoscrizione per la reinizializzazione.

  5. Sincronizzare la sottoscrizione push. Per ulteriori informazioni, vedere Procedura: Sincronizzazione di una sottoscrizione push (programmazione RMO).

Per reinizializzare una sottoscrizione pull in una pubblicazione di tipo merge

  1. Creare una connessione al Sottoscrittore tramite la classe ServerConnection.

  2. Creare un'istanza della classe MergePullSubscription, quindi impostare PublicationName, DatabaseName, PublisherName, PublicationDBName e la connessione ottenuta al passaggio 1 per ConnectionContext.

  3. Chiamare il metodo LoadProperties per ottenere le proprietà dell'oggetto.

    [!NOTA]

    Se questo metodo restituisce false, le proprietà di sottoscrizione sono state definite in modo non corretto nel passaggio 2 oppure la sottoscrizione pull non esiste.

  4. Chiamare il metodo Reinitialize. Passare il valore true per caricare le modifiche nel Sottoscrittore prima della reinizializzazione oppure il valore false per eseguire la reinizializzazione e perdere eventuali modifiche in sospeso nel Sottoscrittore. Questo metodo contrassegna la sottoscrizione per la reinizializzazione.

    [!NOTA]

    Se la sottoscrizione è scaduta, non sarà possibile caricare le modifiche. Per ulteriori informazioni, vedere Sottoscrizione di tipo merge scaduta e necessità di caricare le modifiche.

  5. Sincronizzare la sottoscrizione pull. Per ulteriori informazioni, vedere Procedura: Sincronizzazione di una sottoscrizione pull (programmazione RMO).

Per reinizializzare una sottoscrizione push in una pubblicazione di tipo merge

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection.

  2. Creare un'istanza della classe MergeSubscription, quindi impostare PublicationName, DatabaseName, SubscriberName, SubscriptionDBName e la connessione ottenuta al passaggio 1 per ConnectionContext.

  3. Chiamare il metodo LoadProperties per ottenere le proprietà dell'oggetto.

    [!NOTA]

    Se questo metodo restituisce false, le proprietà di sottoscrizione sono state definite in modo non corretto nel passaggio 2 oppure la sottoscrizione push non esiste.

  4. Chiamare il metodo Reinitialize. Passare il valore true per caricare le modifiche nel Sottoscrittore prima della reinizializzazione oppure il valore false per eseguire la reinizializzazione e perdere eventuali modifiche in sospeso nel Sottoscrittore. Questo metodo contrassegna la sottoscrizione per la reinizializzazione.

    [!NOTA]

    Se la sottoscrizione è scaduta, non sarà possibile caricare le modifiche. Per ulteriori informazioni, vedere Sottoscrizione di tipo merge scaduta e necessità di caricare le modifiche.

  5. Sincronizzare la sottoscrizione push. Per ulteriori informazioni, vedere Procedura: Sincronizzazione di una sottoscrizione push (programmazione RMO).

Esempio

In questo esempio viene eseguita la reinizializzazione di una sottoscrizione pull in una pubblicazione transazionale.

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

In questo esempio viene eseguita la reinizializzazione di una sottoscrizione pull in una pubblicazione di tipo merge dopo aver prima caricato le modifiche in sospeso nel Sottoscrittore.

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