2010-09-07 16 views
5

Tengo varios paquetes de integración de SSIS que inician sesión en una base de datos. Todos escriben en la tabla sysssislog.SSIS: cómo identificar a qué paquete hace referencia una fila en la tabla de registro?

Quiero un procedimiento almacenado para poder devolver el éxito de la última ejecución de un paquete seleccionado.

¿Cómo identifico un paquete en sysssislog? El campo de ejecución parece funcionar, pero parece que está cambiando los valores en las corridas más grandes del mismo paquete (a veces permanece igual). ¿Hay alguna forma de saber de qué paquete proviene una entrada de registro?

Estructura de sysssislog para referencia:

CREATE TABLE [dbo].[sysssislog](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [event] [sysname] NOT NULL, 
    [computer] [nvarchar](128) NOT NULL, 
    [operator] [nvarchar](128) NOT NULL, 
    [source] [nvarchar](1024) NOT NULL, 
    [sourceid] [uniqueidentifier] NOT NULL, 
    [executionid] [uniqueidentifier] NOT NULL, 
    [starttime] [datetime] NOT NULL, 
    [endtime] [datetime] NOT NULL, 
    [datacode] [int] NOT NULL, 
    [databytes] [image] NULL, 
    [message] [nvarchar](2048) NOT NULL, 
+0

Parece que no tiene activados los eventos PackageStart y PackageEnd. –

Respuesta

1

Tome un vistazo si esto le ayuda, desde Books On Line

nvarchar fuente

El nombre del ejecutable, en el paquete, que generó la entrada de registro.

sourceid uniqueidentifier

El GUID del ejecutable en el paquete que generó la entrada de registro.

+0

fuente tiene el nombre de las tareas ejecutadas dentro del paquete, por lo que no parece que me funcione. Los diferentes paquetes pueden contener tareas con el mismo nombre, o los nombres de las tareas dentro de los paquetes podrían cambiarse. – Greg

2

Aquí hay una bonita vista candidato a echar un vistazo a la historia de la ejecución de todos los paquetes de su SSIS, también se puede ver el tiempo que un paquete se ejecuta en minutos: la columna ID

select 
source [PackageName], s.executionid 
, min(s.starttime) StartTime 
, max(s.endtime) EndTime 
, (cast(max(s.endtime) as float) - cast(min(s.starttime) as float))*24*60 DurationInMinutes 
from dbo.sysssislog as s 
where event in ('PackageStart', 'PackageEnd') 
--and source = 'foobar' 
group by s.source, s.executionid 
order by max(s.endtime) desc 
+0

Gracias, pero la fuente parece referirse a cosas dentro de mi paquete, no al nombre del paquete en sí. – Greg

+0

Además, cuando se producen errores en el paquete, no obtengo el paquete de inicio ni los eventos finales. – Greg

0

Fuente donde el evento es "Inicio del paquete" identifica el nombre del paquete. La Id. De ejecución enlaza todas las filas relacionadas para esa instancia del paquete que se ejecuta.

La identificación de origen se puede vincular al desarrollo de su paquete abriendo su paquete y mirando el campo ID en las propiedades de su paquete. Este GUID coincide con su columna de ID de origen del paquete en el registro. Cada objeto en su paquete también tendrá su propio GUID y estos se pueden ver en el registro.

+0

No estoy viendo eso. La fuente contiene las tareas dentro del paquete. Además, no hay inicio de paquete cuando mi paquete presenta errores. – Greg

+0

Si está iniciando sesión, la primera entrada que le envían a sp_ssis_addlogentry siempre tiene un evento de 'Package Start'. Intente ejecutar el paquete en BIDS y vea la ventana Log Events para ver si tiene el logging habilitado correctamente. Para que todo esto funcione, el registro debe estar habilitado. –

+0

obtengo el inicio del paquete pero no cuando llego a ciertos errores, como un archivo que no existe. – Greg

1

La columna "sourceid" sería el mismo que el paquete SSIS GUID para los eventos

  • PackageStart
  • PackageEnd

Como se ha dicho anteriormente - la executionID es el GUID la instancia particular de la carrera.

Es posible que desee habilitar "OnError" controlador de eventos para producir el paquete que no falló.

para generar el informe de lo que puede hacer:.

unen msdb [dbo] [sysdtspackages] y mesa dbo.sysssislog de id = sourceid.. Los paquetes que fallaron tendrán una entrada OnError en la tabla sysssislog desde la que puede inferir el estado.

- Por favor marque si esto responde a su pregunta

1

Al igual que el creador original, que quería ver el nombre de mi paquete delante de todos mis nombres de origen cuando se va a través de mi registro de SSIS. Al leer la respuesta de William, me di cuenta de que ExecutionID podría aprovecharse para hacer exactamente eso, al menos cuando se usa el proveedor de registro SSIS para SQL Server.

Si está utilizando SQL Server 2008 y su tabla de registro SSIS utiliza el nombre estándar de "sysssislog", a continuación, tratar esta consulta:

SELECT s1.id, s1.operator, s1.event, s2.source package_name, s1.source, 
    CONVERT(varchar, s1.starttime, 120) AS starttime, s1.message, s1.datacode 
FROM dbo.sysssislog AS s1 LEFT OUTER JOIN 
     dbo.sysssislog AS s2 ON s1.executionid = s2.executionid 
WHERE s2.event = 'PackageStart' 
ORDER BY s1.id 

Notas:

  • el convertido embellecedores de los estados fuera de los segundos fraccionarios.
  • Ajuste el nombre de la tabla si está utilizando SQL Server 2005.
  • utilicé la consulta para crear una vista que he llamado "SSIS_Log_View"

Espero que ayude.

Cuestiones relacionadas