La ejecución de un paquete SSIS deja de responder al habilitar transacciones DTC para un paquete en Microsoft SQL Server

Este artículo le ayuda a resolver el problema en el que la ejecución de un paquete de Microsoft SQL Server Integration Services (SSIS) deja de responder si habilita transacciones DTC para el paquete y habilita la ValidateExternalMetadata propiedad para un componente en una tarea de flujo de datos.

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

Síntomas

Imagine la siguiente situación:

  • Cree un paquete SSIS en SQL Server.
  • El paquete SSIS contiene una tarea de flujo de datos y otras tareas.
  • La TransactionOption propiedad del paquete SSIS se establece en Requerido para usar transacciones DTC.
  • Las demás tareas se ejecutan en una transacción DTC antes de la ejecución de la tarea de flujo de datos.
  • Agregue un componente a la tarea flujo de datos.
  • La ValidateExternalMetadata propiedad de un componente de flujo de datos se establece en True.
  • La tarea de flujo de datos contiene un componente destino de OLE DB que tiene el modo de acceso a datos establecido en Tabla o vista, o en Nombre de tabla o variable de nombre de vista.

Al ejecutar el paquete en este escenario, la ejecución deja de responder. Además, si depura el paquete SSIS en Visual Studio, recibirá mensajes similares a los siguientes en la vista Progreso :

Se inicia el paquete SSIS "Package.dtsx".

Información: 0x4004300A en Data Flow Task, DTS. Canalización: se está iniciando la fase de validación. Información: 0x4001100A en Paquete: Iniciar la transacción distribuida para este contenedor. Información: 0x4004300A en Data Flow Task, DTS. Canalización: se está iniciando la fase de validación.

Causa

Este problema se produce porque la conexión en el flujo de datos no está inscrita en la transacción DTC. Esto hace que se bloquee la ejecución del sp_cursoropen procedimiento almacenado. Se trata de una característica de diseño porque una conexión no se puede inscribir en una transacción DTC durante el proceso de validación. En el escenario que se describe en la sección Síntomas , el proceso de validación de un componente de flujo de datos se bloquea al ejecutar el paquete porque la conexión en la tarea flujo de datos no se ha inscrito en la transacción DTC.

Solución

Para resolver este problema, utilice uno de los métodos siguientes:

  • Establezca ValidateExternalMetadata para todos los componentes de la tarea de flujo de datos en False.

  • Establezca el modo de acceso a datos del componente Destino de OLE DB en uno de los modos siguientes:

    • Tabla o vista: carga rápida
    • Nombre de tabla o variable de nombre de vista: carga rápida
    • Comando SQL

Más información

El modo de acceso a datos Tabla o Vista está bloqueado, pero no se bloquean otros modos de acceso a datos porque los distintos comandos emitidos por el proveedor de datos para cada modo de acceso a datos. Para obtener más detalles sobre este problema, use SQL Server Profiler para ver los distintos comandos emitidos por el proveedor de datos.