Validar datos en el suscriptor
En este tema se describe cómo validar datos en el suscriptor en SQL Server 2012 mediante SQL Server Management Studio, Transact-SQL o Replication Management Objects (RMO).
La validación de datos es un proceso de tres partes:
Una sola suscripción o todas las suscripciones en una publicación se marcan para validación. Marque las suscripciones para validación en los cuadros de diálogo Validar suscripción, Validar suscripciones y Validar todas las suscripciones, que están disponibles en la carpeta Publicaciones locales y en la carpeta Suscripciones locales en Microsoft SQL Server Management Studio. También puede marcar suscripciones desde la pestaña Todas las suscripciones, la pestaña Lista de supervisión de suscripciones y el nodo de publicaciones del Monitor de replicación. Para obtener información sobre cómo iniciar el Monitor de replicación, vea Iniciar el Monitor de replicación.
Una suscripción se valida la próxima vez que la sincroniza el Agente de distribución (en la replicación transaccional) o el Agente de mezcla (en la replicación de mezcla). El Agente de distribución normalmente se ejecuta de forma continua, en cuyo caso la validación se produce inmediatamente; el Agente de mezcla normalmente se ejecuta a petición, en cuyo caso la validación se produce después de ejecutar el agente.
Vea los resultados de la validación:
En la ventana de detalles del Monitor de replicación: en la pestaña Historial de Distribuidor a suscriptor para la replicación transaccional y en la pestaña Historial de sincronizaciones en la replicación de mezcla.
En el cuadro de diálogo Ver estado de sincronización en Management Studio.
En este tema
Antes de empezar:
Limitaciones y restricciones
Para validar los datos en el suscriptor con:
SQL Server Management Studio
Transact-SQL
Replication Management Objects (RMO)
Antes de empezar
Limitaciones y restricciones
Los procedimientos para el Monitor de replicación solamente son para suscripciones de inserción porque las suscripciones de extracción no se pueden sincronizar en el Monitor de replicación. No obstante, en el Monitor de replicación puede marcar una suscripción para su validación y ver los resultados de la validación para las suscripciones de extracción.
Los resultados de la validación indican si la validación se ha realizado correctamente o si ha tenido errores, pero no se especifica en qué filas se produjo el error de validación si se ha producido. Para comparar datos en el publicador y el suscriptor, use la tablediff (utilidad). Para obtener más información sobre cómo usar esta utilidad con datos replicados, vea Comparar tablas replicadas para buscar diferencias (programación de la replicación).
[Top]
Usar SQL Server Management Studio
Para validar datos de suscripciones en una publicación transaccional (Management Studio)
Conéctese al publicador en SQL Server Management Studio y, a continuación, expanda el nodo de servidor.
Expanda la carpeta Replicación y, a continuación, la carpeta Publicaciones locales.
Haga clic con el botón secundario en la publicación en la que desea validar las suscripciones y, a continuación, haga clic en Validar suscripciones.
En el cuadro de diálogo Validar suscripciones, seleccione las suscripciones que desea validar:
Seleccione Validar todas las suscripciones de SQL Server.
Seleccione Validar las siguientes suscripciones: y, a continuación, seleccione una o varias suscripciones.
Para especificar el tipo de validación que se va a realizar (recuento de filas o recuento de filas y suma de comprobación), haga clic en Opciones de validación y, a continuación, especifique las opciones en el cuadro de diálogo Opciones de validación de suscripciones.
Haga clic en Aceptar.
Vea los resultados de la validación en el Monitor de replicación o en el cuadro de diálogo Ver estado de sincronización. Para cada suscripción:
Expanda la publicación, haga clic con el botón secundario en la suscripción y, a continuación, haga clic en Ver estado de sincronización.
Si el agente no se está ejecutando, haga clic en Iniciar en el cuadro de diálogo Ver estado de sincronización. En el cuadro de diálogo se mostrarán mensajes informativos relacionados con la validación.
Si no ve ningún mensaje relacionado con la validación, el agente ya ha registrado un mensaje posterior. En este caso, vea los resultados de la validación en el Monitor de replicación. Para obtener más información, vea los procedimientos del Monitor de replicación en este tema.
Para validar datos de una sola suscripción en una publicación de combinación (Management Studio)
Conéctese al publicador en SQL Server Management Studio y, a continuación, expanda el nodo de servidor.
Expanda la carpeta Replicación y, a continuación, la carpeta Publicaciones locales.
Expanda la publicación en la que desea validar las suscripciones, haga clic con el botón secundario en la suscripción y, a continuación, haga clic en Validar suscripción.
En el cuadro de diálogo Validar suscripción, seleccione Validar esta suscripción.
Para especificar el tipo de validación que se va a realizar (recuento de filas o recuento de filas y suma de comprobación), haga clic en Opciones y, a continuación, especifique las opciones en el cuadro de diálogo Opciones de validación de suscripciones.
Haga clic en Aceptar.
Vea los resultados de la validación en el Monitor de replicación o en el cuadro de diálogo Ver estado de sincronización:
Expanda la publicación, haga clic con el botón secundario en la suscripción y, a continuación, haga clic en Ver estado de sincronización.
Si el agente no se está ejecutando, haga clic en Iniciar en el cuadro de diálogo Ver estado de sincronización. En el cuadro de diálogo se mostrarán mensajes informativos relacionados con la validación.
Si no ve ningún mensaje relacionado con la validación, el agente ya ha registrado un mensaje posterior. En este caso, vea los resultados de la validación en el Monitor de replicación. Para obtener más información, vea los procedimientos del Monitor de replicación en este tema.
Para validar datos de todas las suscripciones en una publicación de combinación (Management Studio)
Conéctese al publicador en SQL Server Management Studio y, a continuación, expanda el nodo de servidor.
Expanda la carpeta Replicación y, a continuación, la carpeta Publicaciones locales.
Haga clic con el botón secundario en la publicación en la que desea validar las suscripciones y, a continuación, haga clic en Validar todas las suscripciones.
En el cuadro de diálogo Validar todas las suscripciones, especifique el tipo de validación que se va a realizar (recuento de filas o recuento de filas y suma de comprobación).
Haga clic en Aceptar.
Vea los resultados de la validación en el Monitor de replicación o en el cuadro de diálogo Ver estado de sincronización. Para cada suscripción:
Expanda la publicación, haga clic con el botón secundario en la suscripción y, a continuación, haga clic en Ver estado de sincronización.
Si el agente no se está ejecutando, haga clic en Iniciar en el cuadro de diálogo Ver estado de sincronización. En el cuadro de diálogo se mostrarán mensajes informativos relacionados con la validación.
Si no ve ningún mensaje relacionado con la validación, el agente ya ha registrado un mensaje posterior. En este caso, vea los resultados de la validación en el Monitor de replicación. Para obtener más información, vea los procedimientos del Monitor de replicación en este tema.
Para validar datos de todas las suscripciones de inserción en una publicación transaccional (Monitor de replicación)
En el Monitor de replicación, expanda un grupo de publicador en el panel izquierdo y, a continuación, expanda un publicador.
Haga clic con el botón secundario en la publicación en la que desea validar las suscripciones y, a continuación, haga clic en Validar suscripciones.
En el cuadro de diálogo Validar suscripciones, seleccione las suscripciones que desea validar:
Seleccione Validar todas las suscripciones de SQL Server.
Seleccione Validar las siguientes suscripciones: y, a continuación, seleccione una o varias suscripciones.
Para especificar el tipo de validación que se va a realizar (recuento de filas o recuento de filas y suma de comprobación), haga clic en Opciones de validación y, a continuación, especifique las opciones en el cuadro de diálogo Opciones de validación de suscripciones.
Haga clic en Aceptar.
Haga clic en la pestaña Todas las suscripciones.
Vea los resultados de la validación. Para cada suscripción de inserción:
Si no se está ejecutando el agente, haga clic con el botón secundario en la suscripción y, a continuación, haga clic en Iniciar sincronización.
Haga clic con el botón secundario en la suscripción y, a continuación, haga clic en Ver detalles.
Vea información en la pestaña Historial de Distribuidor a suscriptor en el área de texto Acciones en la sesión seleccionada.
Para validar datos de una sola suscripción de inserción en una publicación de combinación (Monitor de replicación)
En el Monitor de replicación, expanda un grupo de publicador en el panel izquierdo, expanda un publicador y, a continuación, haga clic en una publicación.
Haga clic en la pestaña Todas las suscripciones.
Haga clic con el botón secundario en la suscripción que desea validar y, a continuación, haga clic en Validar suscripción.
En el cuadro de diálogo Validar suscripción, seleccione Validar esta suscripción.
Para especificar el tipo de validación que se va a realizar (recuento de filas o recuento de filas y suma de comprobación), haga clic en Opciones y, a continuación, especifique las opciones en el cuadro de diálogo Opciones de validación de suscripciones.
Haga clic en Aceptar.
Haga clic en la pestaña Todas las suscripciones.
Vea los resultados de la validación:
Si no se está ejecutando el agente, haga clic con el botón secundario en la suscripción y, a continuación, haga clic en Iniciar sincronización.
Haga clic con el botón secundario en la suscripción y, a continuación, haga clic en Ver detalles.
Vea información en la pestaña Historial de sincronizaciones en el área de texto Último mensaje de la sesión seleccionada:.
Para validar datos de todas las suscripciones de inserción en una publicación de combinación (Monitor de replicación)
En el Monitor de replicación, expanda un grupo de publicador en el panel izquierdo y, a continuación, expanda un publicador.
Haga clic con el botón secundario en la publicación en la que desea validar las suscripciones y, a continuación, haga clic en Validar todas las suscripciones.
En el cuadro de diálogo Validar todas las suscripciones, especifique el tipo de validación que se va a realizar (recuento de filas o recuento de filas y suma de comprobación).
Haga clic en Aceptar.
Haga clic en la pestaña Todas las suscripciones.
Vea los resultados de la validación. Para cada suscripción de inserción:
Si no se está ejecutando el agente, haga clic con el botón secundario en la suscripción y, a continuación, haga clic en Iniciar sincronización.
Haga clic con el botón secundario en la suscripción y, a continuación, haga clic en Ver detalles.
Vea información en la pestaña Historial de sincronizaciones en el área de texto Último mensaje de la sesión seleccionada:.
[Top]
Usar Transact-SQL
Para validar los datos de todos los artículos de una publicación transaccional
En la base de datos de publicación del publicador, ejecute sp_publication_validation (Transact-SQL). Especifique @publication y uno de los siguientes valores para @rowcount_only:
1: solo comprobación del recuento de filas (el valor predeterminado)
2: recuento de filas y suma de comprobación binaria.
[!NOTA]
Al ejecutar sp_publication_validation (Transact-SQL), se ejecuta sp_article_validation (Transact-SQL) para cada artículo de la publicación. Para ejecutar correctamente sp_publication_validation (Transact-SQL), debe tener los permisos establecidos en SELECT en todas las columnas en las tablas base publicadas.
(Opcional) Inicie el Agente de distribución de cada suscripción si aún no se está ejecutando. Para obtener más información, vea Sincronizar una suscripción de extracción y Sincronizar una suscripción de inserción.
Compruebe el resultado de la validación en la salida del agente. Para obtener más información, vea Validar datos replicados.
Para validar los datos de un único artículo de una publicación transaccional
En la base de datos de publicación del publicador, ejecute sp_article_validation (Transact-SQL). Especificar @publication, el nombre del artículo para @articley uno de los siguientes valores para @rowcount_only:
1: solo comprobación del recuento de filas (el valor predeterminado)
2: recuento de filas y suma de comprobación binaria.
[!NOTA]
Para ejecutar correctamente sp_article_validation (Transact-SQL), debe tener los permisos establecidos en SELECT en todas las columnas de la tabla base publicada.
(Opcional) Iniciar el Agente de distribución de cada suscripción si aún no se está ejecutando. Para obtener más información, vea Sincronizar una suscripción de extracción y Sincronizar una suscripción de inserción.
Compruebe el resultado de la validación en la salida del agente. Para obtener más información, vea Validar datos replicados.
Para validar datos de un suscriptor único en una publicación transaccional
En el publicador de la base de datos de publicación, abra una transacción explícita mediante BEGIN TRANSACTION (Transact-SQL).
En la base de datos de publicación del publicador, ejecute sp_marksubscriptionvalidation (Transact-SQL). Especifique la publicación para @publication, el nombre del suscriptor para @subscribery el nombre de la base de datos de suscripciones para @destination_db.
(Opcional) Repita el paso 2 para cada suscripción que se está validando.
En la base de datos de publicación del publicador, ejecute sp_article_validation (Transact-SQL). Especificar @publication, el nombre del artículo para @articley uno de los siguientes valores para @rowcount_only:
1: solo comprobación del recuento de filas (el valor predeterminado)
2: recuento de filas y suma de comprobación binaria.
[!NOTA]
Para ejecutar correctamente sp_article_validation (Transact-SQL), debe tener los permisos establecidos en SELECT en todas las columnas de la tabla base publicada.
En la base de datos de publicación del publicador, confirme la transacción mediante COMMIT TRANSACTION (Transact-SQL).
(Opcional) Repita los pasos 1 a 5 para cada artículo que se está validando.
(Opcional) Inicie el Agente de distribución si aún no se está ejecutando. Para obtener más información, vea Sincronizar una suscripción de extracción y Sincronizar una suscripción de inserción.
Compruebe el resultado de la validación en la salida del agente. Para obtener más información, vea Validar datos en el suscriptor.
Para validar datos de todas las suscripciones en una publicación de combinación
En la base de datos de publicación del publicador, ejecute sp_validatemergepublication (Transact-SQL). Especifique @publication y uno de los siguientes valores para @level:
1: validación solo del recuento de filas.
3: validación de la suma de comprobación binaria del recuento de filas.
Esto marca todas las suscripciones para validación.
Inicie el Agente de mezcla para cada suscripción. Para obtener más información, vea Sincronizar una suscripción de extracción y Sincronizar una suscripción de inserción.
Compruebe el resultado de la validación en la salida del agente. Para obtener más información, vea Validar datos en el suscriptor.
Para validar datos de las suscripciones seleccionadas en una publicación de combinación
En la base de datos de publicación del publicador, ejecute sp_validatemergesubscription (Transact-SQL). Especifique @publication, el nombre del suscriptor para @suscriptor, el nombre de la base de datos de suscripciones para @subscriber_dby uno de los valores siguientes para @level:
1: validación solo del recuento de filas.
3: validación de la suma de comprobación binaria del recuento de filas.
Esto marca la suscripción seleccionada para validación.
Inicie el Agente de mezcla para cada suscripción. Para obtener más información, vea Sincronizar una suscripción de extracción y Sincronizar una suscripción de inserción.
Compruebe el resultado de la validación en la salida del agente.
Repita los pasos 1 a 3 para cada suscripción que se está validando.
[!NOTA]
Una suscripción a una publicación de combinación también se puede validar al final de una sincronización especificando el parámetro -Validate al ejecutar Agente de mezcla de replicación.
Para validar los datos en una suscripción utilizando los parámetros del Agente de mezcla
Inicie el Agente de mezcla en el suscriptor (suscripción de extracción) o en el distribuidor (suscripción de inserción) del símbolo del sistema de una de las siguientes maneras.
Especificando un valor de 1 (número de filas) o 3 (número de filas y suma de comprobación binaria) para el parámetro -Validate.
Especificando la validación del recuento de filas o la validación del recuento de filas y de la suma de comprobación para el parámetro - ProfileName.
Para obtener más información, vea Sincronizar una suscripción de extracción o Sincronizar una suscripción de inserción.
[Top]
Usar Replication Management Objects (RMO)
La replicación permite usar Replication Management Objects (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.
[!NOTA]
Para obtener un ejemplo, vea Ejemplo (RMO) más adelante en esta sección.
Para validar los datos de todos los artículos de una publicación transaccional
Cree una conexión al publicador mediante la clase ServerConnection.
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.
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.
Llame al método ValidatePublication. Pase lo siguiente:
Un valor booleano que indique si se debe detener el Agente de distribución una vez completada la validación.
De esta forma se marcan los artículos para la validación.
Si no se está ejecutando, inicie el Agente de distribución para sincronizar cada suscripción. Para obtener más información, vea Sincronizar una suscripción de inserción o Sincronizar una suscripción de extracción. El resultado de la operación de la validación se escribe en el historial del agente. Para obtener más información, vea Supervisar la replicación.
Para validar los datos de todas las suscripciones a una publicación de combinación
Cree una conexión al publicador mediante la clase ServerConnection.
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.
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.
Llame al método ValidatePublication. Pase el valor de ValidationOption que desee.
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 Sincronizar una suscripción de extracción y Sincronizar una suscripción de inserción. 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 Supervisar la replicación.
Para validar los datos de una única suscripción a una publicación de combinación
Cree una conexión al publicador mediante la clase ServerConnection.
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.
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.
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.
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 Sincronizar una suscripción de extracción y Sincronizar una suscripción de inserción. 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 Supervisar la replicación.
Ejemplo (RMO)
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 = "AdventureWorks2012";
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 = "AdventureWorks2012"
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 combinación para la validación del recuento de filas.
// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2012";
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
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 = "AdventureWorks2012"
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
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
[Top]