SQL Server error de aserción al intentar ejecutar una instrucción Bulk Insert o BCP

Este artículo le ayuda a resolver el problema que se produce al intentar ejecutar una BULK INSERT operación o BCP .

Versión original del producto: SQL Server 2008 R2 Enterprise, SQL Server 2008 Enterprise
Número de KB original: 2700641

Síntomas

Imagine la siguiente situación:

  • El servidor A y el servidor B ejecutan Microsoft SQL Server 2008 o SQL Server 2008 R2.

  • Configure la creación de reflejo de la base de datos entre el servidor A y el servidor B.

  • Ejecute una BULK INSERT instrucción o BCP en la base de datos principal.

    Nota:

    De forma predeterminada, la CHECK_CONSTRAINTS opción se establece en off al ejecutar una BULK INSERT instrucción o BCP .

  • La creación de reflejo de la base de datos se interrumpe y la sesión de creación de reflejo de la base de datos entra en el estado SUSPENDED.

En este escenario, se produce una aserción en el servidor reflejado. Por lo tanto, se crea un archivo de mini volcado en la carpeta de registro de SQL Server. Además, verá el siguiente error en el registro de errores de SQL Server en el servidor reflejado:

Nota:

Debe reinicializar la creación de reflejo de la base de datos para resolver este problema.

Causa

Este problema se produce porque la información de compatibilidad de bloqueo del registro de transacciones de la base de datos principal no se transfiere al servidor reflejado.

Solución alternativa

Para solucionar este problema, ejecute la BULK INSERT instrucción o BCP en la base de datos principal mediante la CHECK_CONSTRAINTS opción .

Nota:

La CHECK_CONSTRAINTS opción provoca un rendimiento más lento. Sin embargo, no se produce la aserción de bloqueo en el servidor reflejado.

Más información

Durante una BULK INSERT operación o BCP , una transacción secundaria desactiva la CHECK_CONSTRAINTS opción . Esta transacción secundaria usa un bloqueo compatible con los bloqueos de transacción primarios. La información de compatibilidad se almacena en el registro de transacciones de la base de datos principal. Por lo tanto, la solicitud de bloqueo de transacción secundaria se concede en la base de datos principal.

Sin embargo, esta información de compatibilidad no se transfiere al servidor reflejado. Por lo tanto, la solicitud de bloqueo de transacción secundaria no es compatible con los bloqueos de transacción primarios en el servidor reflejado. Este escenario provoca la aserción en el servidor reflejado.