DTC-SQL-FAQ

Error Logging mit Event Handler PDF Drucken E-Mail
  
Donnerstag, den 15. Juli 2010 um 08:26 Uhr

Hin und wieder müssen wie SSIS pakte debuggen. Hier wird ein vernünftiger Mechanismus benötigt,
der während der Ausfürung der SSIS Pakte entsprechende Informationen sammelt.
Hierzu können wir den Event Handler von SSIS verwenden.

Zunächst erststellen wir eine Tabelle die die Fehler Informationen aufnehmen soll:

 

CREATE DATABASE [ErrorDB]
Go
USE [ErrorDB]
GO
CREATE TABLE [dbo].[ErrorLog](
	[ErrorLogID] [INT] IDENTITY(1,1) NOT NULL,
	[PackageLogID] [INT] NULL,
	[PackageName] [VARCHAR](100) NULL,
	[TaskName] [VARCHAR](100) NULL,
	[PrcocedureName] [VARCHAR](100) NULL,
	[ErrorCode] [BIGINT] NULL,
	[ErrorMsg] [VARCHAR](5000) NULL,
	[PackageDuration] [INT] NULL,
	[ContainerDuration] [INT] NULL,
	[ErrorDate] [DATETIME] NULL,
 CONSTRAINT [PK_ErrorLog] PRIMARY KEY CLUSTERED 
(
	[ErrorLogID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
 
GO
 
ALTER TABLE [dbo].[ErrorLog] ADD  CONSTRAINT [DF_ErrorLog_ErrorDate]  DEFAULT (GETDATE()) FOR [ErrorDate]
GO
Column_name Type Description
ErrorLogID int Identity Spalte
PackageLogID int Id des Paketes wird bei jedem Run aktualisiert
PackageName varchar Name des Paketes
TaskName varchar Task that raise the event
ErrorCode bigint Fehlernummer  wird bei OnError() erstellt
ErrorMsg varchar Fehlerbeschreibung
PackageDuration int Ausführungszeit Paket in Sek.
ContainerDuration int Ausführungszeit des Task in Sek.
ErrorDate datetime

Datum und Zeit wann der Fehler auftrat

 

Öffnen Sie und das entsprechende SSIS-Pakt und markieren Sie den Task, für den das Error-LOG

 

SSIS_Error_1

 

 

Markieren Sie das Register Event-Handler und wählen Sie den Event-Handler OnError aus. Benennnen Sie den OnErrorEvent und wechseln sie die Connection zu unserer Datenbank (ggf. müssen Sie mit dem Verbindunsmanager zunächst eine entsprechende Connection zur ErrorDB herstellen)

 

SSIS_Error_2

 

 

Im Editor tragen wir nun das passende SQL-Statment ein:

 

"INSERT INTO  
[ErrorDB].[dbo].[ErrorLog]
(
[PackageName],
[PackageLogID],
[TaskName],
[ErrorCode],
[ErrorMsg],
[PackageDuration],
[ContainerDuration],
[ErrorDate]
)
VALUES
('"  	+ @[System::PackageName] + "'," 
	+ (DT_STR, 15, 1252) @[User::PackageLogID] 
	+  ",'" 
	+ @[System::SourceName] 
	+ "'," + (DT_STR, 15, 1252)  @[System::ErrorCode] 
	+ ",'" + @[System::ErrorDescription] 
	+ "'," 
	+  (DT_STR,6, 1252) DATEDIFF("ss", @[System::StartTime] ,GETDATE()) 
	+ "," 
	+  (DT_STR,6, 1252) DATEDIFF("ss", @[System::ContainerStartTime] ,GETDATE()) 
	+  ", GETDATE())"

 

 

Lassen Sie die Syntax mit Evaluate Expression überprüfen.

Anm:

 Sie müssen alle numerischen Werte Casten. Ansonsten liefert Ihnen Evaluate Expression eine Fehlermeldung.
SQLStatementSource erwartet immer einen String!

Klicken Sie abschliessend OK

 So, nun können wir unser kleines Programm testen:

Setzen Sie zum Test für den Dataflow Task eine falsche Connection Eigenschaft, so dass der Task sich nicht mehr verbinden kann.
Bei der Ausführung wird dann ein Fehler auftreten, der in unserem ErrorLog protokolliert wird:

 

SSIS_Error_result

Aktualisiert ( Montag, den 19. Juli 2010 um 13:00 Uhr )
 

Wer ist online

Wir haben 5 Gäste online
2429
HeuteHeute14
GesternGestern49
Diese WocheDiese Woche14
Dieser MonatDieser Monat235
TotalTotal2429
Statistik created: c
IP.:38.107.191.101
US
UNITED STATES
US
Copyright © 2010 DTC-SQL-FAQ. Alle Rechte vorbehalten.
Joomla! ist freie, unter der GNU/GPL-Lizenz veröffentlichte Software.