Cómo validar datos en el suscriptor (programación con RMO)

La replicación permite usar objetos de administración de replicación (RMO) para validar mediante programación si los datos del suscriptor coinciden con los datos del publicador. Los objetos que se usan dependen del tipo de topología de replicación. La replicación transaccional requiere la validación de todas las suscripciones a una publicación.

Para validar los datos de todos los artículos de una publicación transaccional

  1. Cree una conexión al publicador mediante la clase ServerConnection.

  2. Cree una instancia de la clase TransPublication. Establezca las propiedades Name y DatabaseName de la publicación. Establezca la propiedad ConnectionContext en la conexión creada en el paso 1.

  3. Llame al método LoadProperties para obtener 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.

  4. Llame al método ValidatePublication. Pase lo siguiente:

    De esta forma se marcan los artículos para la validación.

  5. Si no se está ejecutando, inicie el Agente de distribución para sincronizar cada suscripción. Para obtener más información, vea Cómo sincronizar una suscripción de inserción (programación con RMO) o Cómo sincronizar una suscripción de extracción (programación con RMO). El resultado de la operación de la validación se escribe en el historial del agente. Para obtener más información, vea Cómo supervisar la replicación mediante programación (programación con RMO).

Para validar los datos de todas las suscripciones a una publicación de mezcla

  1. Cree una conexión al publicador mediante la clase ServerConnection.

  2. Cree una instancia de la clase MergePublication. Establezca las propiedades Name y DatabaseName de la publicación. Establezca la propiedad ConnectionContext en la conexión creada en el paso 1.

  3. Llame al método LoadProperties para obtener 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.

  4. Llame al método ValidatePublication. Pase el valor de ValidationOption que desee.

  5. Ejecute el Agente de mezcla en cada suscripción para iniciar la validación o espere hasta la siguiente ejecución programada del agente. Para obtener más información, vea Cómo sincronizar una suscripción de extracción (programación con RMO) y Cómo sincronizar una suscripción de inserción (programación con RMO). El resultado de la operación de la validación se escribe en el historial del agente, que se puede consultar con el Monitor de replicación. Para obtener más información, vea Cómo supervisar la replicación mediante programación (programación con RMO).

Para validar los datos de una única suscripción a una publicación de mezcla

  1. Cree una conexión al publicador mediante la clase ServerConnection.

  2. Cree una instancia de la clase MergePublication. Establezca las propiedades Name y DatabaseName de la publicación. Establezca la propiedad ConnectionContext en la conexión creada en el paso 1.

  3. Llame al método LoadProperties para obtener 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.

  4. Llame al método ValidateSubscription. Pase el nombre del suscriptor y la base de datos de suscripciones que se validan y el valor de ValidationOptiondeseado.

  5. Ejecute el Agente de mezcla en la suscripción para iniciar la validación o espere hasta la siguiente ejecución programada del agente. Para obtener más información, vea Cómo sincronizar una suscripción de extracción (programación con RMO) y Cómo sincronizar una suscripción de inserción (programación con RMO). El resultado de la operación de la validación se escribe en el historial del agente, que se puede consultar con el Monitor de replicación. Para obtener más información, vea Cómo supervisar la replicación mediante programación (programación con RMO).

Ejemplo

Este ejemplo marca todas las suscripciones a una publicación transaccional para la validación del recuento de filas.

          // Define the server, database, and publication names
            string publisherName = publisherInstance;
            string publicationName = "AdvWorksProductTran";
            string publicationDbName = "AdventureWorks2008R2";

            TransPublication publication;

            // Create a connection to the Publisher.
            ServerConnection conn = new ServerConnection(publisherName);

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

                // Set the required properties for the publication.
                publication = new TransPublication();
                publication.ConnectionContext = conn;
                publication.Name = publicationName;
                publication.DatabaseName = publicationDbName;

                // If we can't get the properties for this publication, 
                // throw an application exception.
                if (publication.LoadProperties())
                {
                    // Initiate validataion for all subscriptions to this publication.
                    publication.ValidatePublication(ValidationOption.RowCountOnly,
                        ValidationMethod.ConditionalFast, false);

                    // If not already running, start the Distribution Agent at each 
                    // Subscriber to synchronize and validate the subscriptions.
                }
                else
                {
                    throw new ApplicationException(String.Format(
                        "Settings could not be retrieved for the publication. " +
                        "Ensure that the publication {0} exists on {1}.",
                        publicationName, publisherName));
                }
            }
            catch (Exception ex)
            {
                // Do error handling here.
                throw new ApplicationException(
                    "Subscription validation could not be initiated.", ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2008R2"

Dim publication As TransPublication

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

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

    ' Set the required properties for the publication.
    publication = New TransPublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' If we can't get the properties for this publication, 
    ' throw an application exception.
    If publication.LoadProperties() Then

        ' Initiate validataion for all subscriptions to this publication.
        publication.ValidatePublication(ValidationOption.RowCountOnly, _
         ValidationMethod.ConditionalFast, False)

        ' If not already running, start the Distribution Agent at each 
        ' Subscriber to synchronize and validate the subscriptions.
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException( _
     "Subscription validation could not be initiated.", ex)
Finally
    conn.Disconnect()
End Try

Este ejemplo marca una suscripción específica a una publicación de mezcla para la validación del recuento de filas.

         // Define the server, database, and publication names
            string publisherName = publisherInstance;
            string publicationName = "AdvWorksSalesOrdersMerge";
            string publicationDbName = "AdventureWorks2008R2";
            string subscriberName = subscriberInstance;
            string subscriptionDbName = "AdventureWorks2008R2Replica";

            MergePublication publication;

            // Create a connection to the Publisher.
            ServerConnection conn = new ServerConnection(publisherName);

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

                // Set the required properties for the publication.
                publication = new MergePublication();
                publication.ConnectionContext = conn;
                publication.Name = publicationName;
                publication.DatabaseName = publicationDbName;


                // If we can't get the properties for this merge publication, then throw an application exception.
                if (publication.LoadProperties())
                {
                    // Initiate validation of the specified subscription.
                    publication.ValidateSubscription(subscriberName,
                        subscriptionDbName, ValidationOption.RowCountOnly);
                    
                    // Start the Merge Agent to synchronize and validate the subscription.
                }
                else
                {
                    throw new ApplicationException(String.Format(
                        "Settings could not be retrieved for the publication. " +
                        "Ensure that the publication {0} exists on {1}.",
                        publicationName, publisherName));
                }
            }
            catch (Exception ex)
            {
                // Do error handling here.
                throw new ApplicationException(String.Format(
                    "The subscription at {0} to the {1} publication could not " +
                    "be validated.", subscriberName, publicationName), ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2008R2"
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2008R2Replica"

Dim publication As MergePublication

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

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

    ' Set the required properties for the publication.
    publication = New MergePublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' If we can't get the properties for this merge publication, then throw an application exception.
    If publication.LoadProperties() Then
        ' Initiate validation of the specified subscription.
        publication.ValidateSubscription(subscriberName, _
         subscriptionDbName, ValidationOption.RowCountOnly)

        ' Start the Merge Agent to synchronize and validate the subscription.
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException(String.Format( _
     "The subscription at {0} to the {1} publication could not " + _
     "be validated.", subscriberName, publicationName), ex)
Finally
    conn.Disconnect()
End Try