Solucionar problemas de ejecución de paquetes
Actualizado: 12 de diciembre de 2006
Integration Services incluye características y herramientas que puede utilizar para solucionar problemas de los paquetes durante su ejecución, después de que los paquetes se hayan completado e implementado.
En tiempo de diseño, Business Intelligence Development Studio proporciona puntos de interrupción para pausar la ejecución de los paquetes, la ventana de progreso y los visores de datos para ver los datos a medida que pasan por el flujo de datos. Sin embargo, estas características no están disponibles cuando se ejecutan paquetes que se han implementado. Las principales técnicas para solucionar problemas de paquetes implementados son las siguientes:
- Detectar y controlar errores de paquetes mediante controladores de eventos.
- Capturar datos incorrectos mediante las salidas de error.
- Realizar un seguimiento de los pasos en la ejecución de paquetes mediante el registro.
También se pueden aplicar las siguientes sugerencias y técnicas para evitar la generación de problemas al ejecutar paquetes:
- Ayudar a garantizar la integridad de los datos mediante el uso de transacciones. Para obtener más información, vea Incorporar transacciones en paquetes.
- Reiniciar los paquetes desde el momento del error mediante el uso de puntos de comprobación. Para obtener más información, vea Usar puntos de comprobación en paquetes.
Detectar y controlar errores de paquetes mediante controladores de eventos
Se puede responder a los diversos eventos que generan el paquete y los objetos del paquete utilizando controladores de eventos.
- Crear un controlador de eventos para el evento OnError. En el controlador de eventos, puede utilizar una tarea Enviar correo para notificar sobre el error a un administrador, emplear una tarea Secuencia de comandos y la lógica personalizada a fin de obtener información del sistema para solucionar problemas, o bien limpiar recursos temporales o salidas incompletas. Para obtener más información, vea Controladores de eventos de Integration Services y Crear controladores de eventos de paquetes.
Solucionar problemas de proveedores de datos externos
Muchos de los errores de los paquetes se producen durante la interacción con proveedores de datos externos. Sin embargo, los mensajes que dichos proveedores devuelven a Integration Services no suelen proporcionar suficiente información como para comenzar a solucionar los problemas de interacción. Para cubrir esta necesidad de solucionar problemas, el Service Pack 2 (SP2) de Microsoft SQL Server 2005 incluye nuevos mensajes de registro que puede utilizar para solucionar problemas relacionados con la interacción de un paquete con orígenes de datos externos.
Habilite el registro de paquetes y seleccione el evento Diagnostic del paquete para ver los nuevos mensajes de solución de problemas. A partir del SP2, los siguientes componentes de Integration Services son capaces de escribir un mensaje en el registro antes y después de cada llamada a un proveedor de datos externo:
- Administrador de conexión OLE DB, origen de OLE DB y destino de OLE DB
- Administrador de conexión ADO.NET y origen de DataReader
- Tarea Ejecutar SQL
- Transformación Búsqueda, transformación Comando de OLE DB y transformación Dimensión de variación lenta
Los nuevos mensajes de registro incluyen el nombre del método al que se llama. Por ejemplo, estos mensajes de registro podrían incluir el método Open de un objeto Connection de OLE DB o el método ExecuteNonQuery de un objeto Command. Estos mensajes presentan el siguiente formato, donde '%1!s!' es un marcador de posición para la información del método:
ExternalRequest_pre: The object is ready to make the following external request: '%1!s!'. ExternalRequest_post: '%1!s!'. The external request has completed.
Para solucionar los problemas de interacción con el proveedor de datos externo, revise el registro para comprobar si cada mensaje "anterior" (
ExternalRequest_pre
) tiene un mensaje "posterior" correspondiente (ExternalRequest_post
). Si no hay un mensaje "posterior" correspondiente, podrá saber que el proveedor de datos externo no respondió tal y como se esperaba.
En el siguiente ejemplo se muestran algunas filas de ejemplo de un registro que incluye los nuevos mensajes de registro:ExternalRequest_pre: The object is ready to make the following external request: 'ITransactionJoin::JoinTransaction'. ExternalRequest_post: 'ITransactionJoin::JoinTransaction succeeded'. The external request has completed. ExternalRequest_pre: The object is ready to make the following external request: 'IDbConnection.Open'. ExternalRequest_post: 'IDbConnection.Open succeeded'. The external request has completed. ExternalRequest_pre: The object is ready to make the following external request: 'IDbConnection.CreateCommand'. ExternalRequest_post: 'IDbConnection.CreateCommand finished'. The external request has completed." ExternalRequest_pre: The object is ready to make the following external request: 'IDbCommand.ExecuteReader'. ExternalRequest_post: 'IDbCommand.ExecuteReader finished'. The external request has completed." ExternalRequest_pre: The object is ready to make the following external request: 'IDataReader.GetSchemaTable'. ExternalRequest_post: 'IDataReader.GetSchemaTable finished'. The external request has completed." ExternalRequest_pre: The object is ready to make the following external request: 'IDataReader.Close'. ExternalRequest_post: 'IDataReader.Close finished'. The external request has completed." ExternalRequest_pre: The object is ready to make the following external request: 'IDbConnection.Close'. ExternalRequest_post: 'IDbConnection.Close finished'. The external request has completed."
Solucionar problemas de datos incorrectos mediante las salidas de error
Se puede utilizar la salida de error disponible en varios componentes de flujo de datos para dirigir las filas que contienen errores a un destino independiente para su análisis posterior.
- Capturar datos incorrectos mediante las salidas de error. Envíe las filas que contengan errores a un destino independiente, como una tabla de errores o un archivo de texto. Automáticamente, la salida de error agrega dos columnas numéricas que contienen el número de error que causó el rechazo de la fila y el Id. de la columna en la que se produjo el error. Para obtener más información, vea Controlar errores en los datos y Cómo configurar una salida de error en un componente de flujo de datos.
- Agregar información descriptiva a las salidas de error. Se puede facilitar el análisis de la salida de error agregando información descriptiva a los dos identificadores numéricos que proporciona la salida de error.
Agregar la descripción del error. Es sencillo buscar la descripción de un error mediante un componente de secuencia de comandos. Para obtener más información, vea Enhancing an Error Output with the Script Component.
Agregar el nombre de la columna con un error. No es sencillo buscar en el componente de secuencia de comandos el nombre de la columna que corresponde al Id. de columna guardado por la salida de error, y se requieren pasos adicionales. Cada Id. de columna de un flujo de datos es único dentro de esa tarea Flujo de datos y se mantiene en el paquete en tiempo de diseño. A continuación se sugiere un enfoque posible para agregar el nombre de columna a la salida de error:- Crear una tabla de búsqueda con los nombres de columna. Cree una aplicación independiente que utilice la API Integration Services para establecer una iteración en cada paquete guardado, cada flujo de datos de cada paquete, cada objeto del flujo de datos, y cada entrada y salida del objeto de flujo de datos. La aplicación deberá almacenar el Id. y el nombre de columna de cada columna en una tabla de búsqueda, junto con el Id. de la tarea Flujo de datos primaria y el Id. del paquete.
- Agregar el nombre de columna en la salida. Agregue una transformación Búsqueda a la salida de error que busque el nombre de columna en la tabla de búsqueda creada en el paso anterior. La búsqueda puede utilizar el Id. de columna en la salida de error, el Id. de paquete (disponible en la variable del sistema System::PackageID) y el Id. de la tarea Flujo de datos (disponible en la variable del sistema System::TaskID).
Solucionar problemas de la ejecución de paquetes mediante el registro
Al habilitar el registro, se puede hacer un seguimiento de gran parte de lo que sucede en los paquetes en ejecución. Los proveedores de registro capturan información sobre los eventos especificados para su análisis posterior y guardan la información en una tabla de base de datos, un archivo plano, un archivo XML u otro formato de salida compatible.
- Habilitar el registro. Se puede precisar la salida del registro seleccionando sólo los eventos y sólo los datos que desea capturar. Para obtener más información, vea Proveedores de registro de Integration Services y Implementar inicios de sesión en paquetes.
- Seleccione el evento Diagnostic del paquete para solucionar problemas relativos al proveedor. En el SP2, hay una serie de nuevos mensajes de registro que pueden ayudarle a solucionar problemas relacionados con la interacción de un paquete con orígenes de datos externos. Para obtener más información, vea Solucionar problemas de proveedores de datos externos en este tema.
- Mejorar la salida predeterminada del registro. Normalmente, el registro anexa filas al destino de registro cada vez que se ejecuta un paquete. Si bien cada fila de la salida del registro identifica el paquete por su nombre e identificador único, y también identifica la ejecución del paquete mediante un ExecutionID único, la gran cantidad de datos de salida del registro incluidos en una sola lista puede ser difícil de analizar. A continuación se sugiere un enfoque posible para mejorar la salida predeterminada del registro y facilitar la generación de informes:
- Crear una tabla primaria que almacene cada ejecución de un paquete. La tabla primaria sólo tendrá una fila para cada ejecución de un paquete y utilizará ExecutionID para establecer vínculos con los registros secundarios de la tabla de registro de Integration Services. Se puede utilizar una tarea Ejecutar SQL al principio de cada paquete para crear esta fila y registrar la hora de inicio. Se puede utilizar otra tarea Ejecutar SQL al final del paquete para actualizar la fila con la hora de finalización, duración y estado.
- Agregar información de auditoría al flujo de datos. Se puede utilizar la transformación Auditar para agregar información a las filas del flujo de datos sobre la ejecución de paquetes que creó o modificó cada fila. La transformación Auditar pone a disposición del usuario nueve datos, que incluyen PackageName y ExecutionInstanceGUID. Para obtener más información, vea Transformación Auditar. Si existe información personalizada que desearía incluir también en cada fila para fines de auditoría, puede agregar esa información a las filas del flujo de datos utilizando una transformación Columna derivada. Para obtener más información, vea Transformación Columna derivada.
- Posibilidad de capturar datos de recuento de filas. Tenga en cuenta la posibilidad de crear una tabla independiente para almacenar información de recuento de filas, donde cada instancia de ejecución del paquete se identifique mediante su ExecutionID. Utilice la transformación Recuento de filas para guardar el recuento de filas en una serie de variables en puntos clave del flujo de datos. Tras finalizar el flujo de datos, utilice una tarea Ejecutar SQL para insertar la serie de valores en una fila de la tabla para permitir realizar análisis y generar informes posteriormente.
Solucionar problemas de validación en tiempo de ejecución
Puede haber momentos en los que no sea posible conectarse a los orígenes de datos, o en los que no puedan validarse partes del paquete, sin ejecutar primero tareas anteriores del paquete. Integration Services incluye las siguientes características para ayudarle a evitar los errores de validación que, de lo contrario, se producirían como resultado de las siguientes situaciones:
- Configurar la propiedad DelayValidation para los elementos del paquete que no son válidos al cargar el paquete. Se puede establecer DelayValidation en True para los elementos del paquete cuya configuración no sea válida, a fin de evitar errores de validación al cargar el paquete. Por ejemplo, puede haber una tarea Flujo de datos que utilice una tabla de destino inexistente antes de que la tarea de ejecución de SQL cree la tabla en tiempo de ejecución. La propiedad DelayValidation se puede habilitar en el nivel de paquete o en el de tareas y contenedores individuales incluidos en el paquete.
Es posible establecer la propiedad DelayValidation para una tarea Flujo de datos, pero no para componentes individuales del flujo de datos. Se puede obtener un resultado similar estableciendo la propiedad ValidateExternalMetadata para componentes de flujo de datos individuales en false. No obstante, cuando el valor de esta propiedad es false, el componente no detecta los cambios realizados en los metadatos de los orígenes de datos externos. Cuando se la establece en true, la propiedad ValidateExternalMetadata puede ayudar a evitar problemas de bloqueo causados por bloqueos en la base de datos, en especial cuando el paquete está utilizando transacciones.
Solucionar problemas de permisos en tiempo de ejecución
Si surgen errores al intentar ejecutar paquetes implementados mediante el Agente SQL Server, puede suceder que las cuentas que utiliza el Agente no cuenten con los permisos necesarios. Para obtener información sobre cómo solucionar problemas de los paquetes que se ejecutan desde los trabajos del Agente SQL Server, consulte el artículo de Microsoft Knowledge Base de soporte técnico, No se ejecuta un paquete de SSIS al llamarlo desde un paso de trabajo del Agente SQL Server. Para obtener más información acerca de cómo ejecutar paquetes desde trabajos del Agente SQL Server, vea Programar la ejecución de paquetes en el Agente SQL Server y Cómo ejecutar un paquete con un trabajo del Agente SQL Server.
Solucionar problemas de la modalidad de 64 bits
Si surgen errores en un servidor de 64 bits con paquetes que se ejecutan correctamente en el modo de 32 bits o en servidores de 32 bits, tenga en cuenta los siguientes problemas habituales. Para obtener más información, vea Consideraciones acerca de Integration Services en equipos de 64 bits.
- Algunos proveedores de datos no están disponibles en la plataforma de 64 bits. En concreto, el proveedor OLE DB para Microsoft Jet, que se necesita para la conexión a orígenes de datos de Excel o Access, no está disponible versiones de 64 bits.
- Las secuencias de comandos deben estar precompiladas en equipos de 32 bits para poder utilizarse en equipos de 64 bits. En paquetes que utilizan tareas Secuencia de datos o componentes de secuencia de datos, la propiedad PreCompile debe establecerse en True.
- Los paquetes DTS no pueden ejecutarse en modo de 64 bits. Si el paquete utiliza la tarea Ejecutar paquete DTS 2000 para ejecutar los paquetes de Servicios de transformación de datos (DTS) de SQL Server 2000, se deben ejecutar los paquetes en modo de 32 bits. No se proporciona compatibilidad de tiempo de ejecución en modo de 64 bits para paquetes DTS.
Solucionar problemas de errores sin descripción
Si se encuentra un error de Integration Services que no tiene ninguna descripción asociada, puede ver la descripción en Integration Services Error and Message Reference buscando el error por su número. En este momento, la lista no incluye información sobre cómo solucionar problemas.
Vea también
Tareas
Solucionar problemas de desarrollo de los paquetes
Conceptos
Solucionar problemas de rendimiento de los paquetes
Solucionar problemas del servicio Integration Services
Ayuda e información
Obtener ayuda sobre SQL Server 2005
Historial de cambios
Versión | Historial |
---|---|
12 de diciembre de 2006 |
|