Use el parámetro -SkipErrors en Agente de distribución

En este artículo se presenta el uso del -SkipErrors parámetro en Agente de distribución.

Versión del producto original: SQL Server
Número de KB original: 327817

Resumen

Microsoft SQL Server incluye el nuevo parámetro -SkipErrors en la Agente de distribución que permite al Agente de distribución omitir el error indicado en la replicación transaccional y continuar el proceso de distribución.

El siguiente extracto se encuentra en el tema Control de errores del agente en SQL Server Libros en pantalla:

En el procesamiento de replicación típico, no debe experimentar ningún error que tenga que omitirse. La capacidad de omitir errores durante la replicación transaccional está disponible para las circunstancias únicas en las que espera errores y no quiere que afecten a la replicación (por ejemplo, al conmutar por error a un publicador secundario durante el trasvase de registros).

Microsoft recomienda usar este parámetro con precaución y solo cuando tenga una buena comprensión de lo siguiente:

  • Lo que indica el error.
  • Por qué se produce el error.
  • Por qué es mejor omitir el error en lugar de resolverlo.

Si no conoce las respuestas a estos elementos, el uso inadecuado del -SkipErrors parámetro puede provocar incoherencia de datos entre el publicador y el suscriptor. En este artículo se describen algunos problemas que pueden producirse cuando se usa incorrectamente el -SkipErrors parámetro .

Más información

En la replicación transaccional, los cambios de datos en el publicador se propagan al suscriptor en la unidad de transacción.

En una transacción, puede haber varios comandos. De forma predeterminada, si se produce un error en un comando, toda la transacción de replicación se revierte en el suscriptor. Si agrega el -SkipErrors parámetro para permitir que el Agente de distribución omita determinados errores, el comando individual que provoca este error no se aplica al suscriptor, pero se aplican todos los demás comandos de las mismas transacciones. En esta situación, la transacción de replicación solo se aplica parcialmente al suscriptor, lo que puede provocar la incoherencia de datos entre el publicador y el suscriptor.

Por ejemplo:

Tiene una transacción a la espera de que se replique en la tabla del suscriptor denominada T1. Esta transacción incluye 100 instrucciones insert. Cuando se aplica al suscriptor, las primeras 90 inserciones se procesan correctamente; sin embargo, se produce un error en la instrucción insert de noventa primeros y se produce el error de infracción de clave principal 2627.

Cuando no se usa el -SkipErrors parámetro (comportamiento predeterminado):

De forma predeterminada, toda la transacción se revierte y ninguno de los 100 registros nuevos se inserta en la tabla de suscripción. En esta situación, debe corregir el error de replicación para que la transacción se pueda volver a aplicar al suscriptor.

Cuando se usa el -SkipErrors parámetro :

El Agente de distribución registra el error en el historial de Agente de distribución, omite este error y, a continuación, continúa el proceso de distribución. Por lo tanto, excepto en el noventa primero registro nuevo que produjo el error, los otros 99 registros nuevos se insertan en la tabla de suscripción. El Agente de distribución no vuelve a aplicar esta transacción, incluso después de corregir manualmente el error en el suscriptor. Por lo tanto, en esta situación, al suscriptor le falta el noventa primero registro nuevo y se produce un problema de incoherencia de datos.

También debe tener en cuenta que, en SQL Server 2000, normalmente, varias publicaciones comparten el Agente de distribución (de forma predeterminada, hay una Agente de distribución por base de datos de publicaciones y par de base de datos de suscripciones), por lo que si agrega el -SkipErrors parámetro al Agente de distribución trabajo, afecta a todas las publicaciones que este agente está prestando servicio. En las versiones SQL 2005 y SQL 2008, la replicación transaccional usa agentes independientes de forma predeterminada para las publicaciones creadas en el Asistente para nueva publicación. En el caso de las publicaciones creadas mediante sp_addpublication el procedimiento almacenado, el comportamiento predeterminado es usar un agente compartido.

Para usar el -SkipErrors parámetro para una publicación específica, use un agente independiente, que solo presta servicios a una suscripción. Para usar un agente independiente, siga los pasos de la versión:

SQL Server 2000

  1. En SQL Server Enterprise Manager, haga clic con el botón derecho en la publicación, haga clic en Propertiesy, a continuación, en la pestaña Opciones de suscripción, haga clic en la opción Usar una Agente de distribución independiente de otra publicación de esta base de datos.

    Nota:

    No puede activar esta opción después de agregar suscripciones a esta publicación.

  2. Agregue el -SkipErrors parámetro al Agente de distribución de una suscripción específica.

SQL Server 2005 y SQL Server 2008

  1. En SQL Server estudio de administración, vaya a Replicación y, a continuación, en la sección Publicaciones locales, haga clic con el botón derecho en la publicación, haga clic en Propiedadesy, a continuación, en la página Opciones de suscripción, cambie el valor de Independiente Agente de distribución de False a True.

    Nota:

    No puede activar esta opción después de agregar suscripciones a esta publicación.

  2. Agregue el -SkipErrors parámetro al Agente de distribución de una suscripción específica.

Para obtener más información, vea los artículos siguientes: