sql >> Base de Datos >  >> RDS >> Sqlserver

¿Puede monitorear la ejecución de un paquete SSIS, en BIDS, mientras se ejecuta en el servidor?

Opción posible:

Debe hacer uso de Logging función en SSIS. Le permite configurar los eventos para los que le gustaría capturar los mensajes. Normalmente prefiero el registro OnWarning y OnError para realizar un seguimiento de todos los mensajes de advertencia y error que se producen en el paquete. Tiene varios proveedores para guardar los datos de registro. Prefiero usar SQL Server para poder consultar la información de registro.

Opciones de registro mostradas desde SSIS 2012:

Para habilitar el inicio de sesión en un paquete, debe hacer clic en el paquete Business Intelligence Development Studio (BIDS) si está desarrollando paquetes en SSIS 2005 - 2008 R2 o SQL Server Data Tools (SSDT) si está desarrollando paquetes en SSIS 2012.

Haga clic en SSIS y luego haga clic en Logging...

Verá el cuadro de diálogo Configurar registros de SSIS.

En el lado izquierdo, puede consultar el paquete o las tareas individuales para registrar los datos del evento.

En Proveedores y registros pestaña, puede seleccionar un proveedor adecuado en el que puede guardar la información de registro. La siguiente captura de pantalla muestra que la información de eventos se captura en una base de datos de SQL Server utilizando el administrador de conexión OLEDB_PracticeDB .

En los Detalles pestaña, puede seleccionar qué eventos le gustaría capturar. La siguiente captura de pantalla muestra que estoy capturando los siguientes eventos.

  • SobreError
  • Sobre la información
  • Error en la tarea
  • En Advertencia

Gracias a @William Todd Salzman por recomendar OnTaskFailed evento

Ilustración del paquete de muestra:

Digamos que tenemos un paquete llamado SO_15004109.dtsx con una tarea de flujo de datos y Tarea de secuencia de comandos . Data Flow Task es solo un maniquí sin componentes en su interior.

La tarea de secuencia de comandos tiene el siguiente código en el método principal para activar información personalizada, mensajes de advertencia y de error para que podamos observar cómo se captura en la fuente de datos de registro. El código está escrito para SSIS 2012, por lo que es posible que deba modificarlo para SSIS 2005. Elegí VB.NET en lugar de C# porque ha etiquetado esta pregunta en y SSIS 2005 solo es compatible con VB.NET.

Código de tarea de script en VB.NET para SSIS 2005 y superior.

#Region "Imports"
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
#End Region

<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute()> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
    Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase

    Public Sub Main()

        Dim fireAgain As Boolean = False
        Dts.Events.FireInformation(101, "Custom Script Information", "This is a test information message.", String.Empty, 0, fireAgain)
        Dts.Events.FireWarning(201, "Custom Script Warning", "This is a test warning message.", String.Empty, 0)
        Dts.Events.FireError(201, "Custom Script Error", "This is a test error message.", String.Empty, 0)

        Dts.TaskResult = ScriptResults.Success
    End Sub

#Region "ScriptResults declaration"
   
    Enum ScriptResults
        Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
        Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
    End Enum

#End Region

End Class

Si ejecutamos el paquete, fallará porque generamos un error dentro de la Tarea de script .

Si navega a la fuente de datos donde registró los errores, notará que SSIS crea una tabla para registrar la información si elige el proveedor de registro de SQL Server. La siguiente tabla enumera la tabla de registro que SSIS crea en la base de datos de SQL Server elegida para ser el proveedor de registro.

SSIS Version   Log table name    Table type
-------------- ----------------  ----------
SSIS 2005      dbo.sysdtslog90   User
SSIS 2008      dbo.sysdtslog100  User
SSIS 2008 R2   dbo.sysssislog    System
SSIS 2012      dbo.sysssislog    System

La siguiente consulta se ejecutó en la base de datos para ver los eventos capturados por este paquete de muestra. Notará algunos mensajes dos veces porque los eventos se registran para cada contenedor y tarea. La tabla se llama dbo.sysssislog porque el paquete se creó en SSIS 2012.

select id, event, source, message from dbo.sysssislog;

Experiencia personal con el registro:

He tenido bastante éxito al ver los mensajes de error de registro para comprender qué salió mal. En mi opinión, no es aconsejable depurar paquetes en el entorno de producción. Sin embargo, es preferible capturar eventos de registro.

Cuando trabajé en SSIS 2005 y 2008, creé informes basados ​​en SSRS que consultan la tabla de registro para generar un informe diario de las ejecuciones de trabajos y enviar un archivo PDF adjunto a las personas de interés.

Las cosas han mejorado en SSIS 2012 que la herramienta viene con capacidades de generación de informes integradas con Catálogo de servicios de integración que crea una base de datos llamada SSIDB .