Compartir a través de


Error de aserción de SQL Server 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

Considere el caso siguiente:

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

  • Configurará 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 desactivada 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 estado SUSPENDED.

En este escenario, se produce una aserción en el servidor reflejado. Por lo tanto, se crea un archivo de minivolcado 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 en el registro de transacciones de la base de datos principal no se transfiere al servidor reflejado.

Solución

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.

Información adicional

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.