Mögliche Option:
Sie müssen die Logging
verwenden Funktion in SSIS. Sie können die Ereignisse konfigurieren, für die Sie die Nachrichten erfassen möchten. Normalerweise bevorzuge ich das Protokoll OnWarning
und OnError
um alle Warn- und Fehlermeldungen zu verfolgen, die im Paket auftreten. Sie haben verschiedene Anbieter, um die Protokolldaten zu speichern. Ich ziehe es vor, SQL Server zu verwenden, damit ich die Protokollinformationen abfragen kann.
Protokollierungsoptionen, die von SSIS 2012 angezeigt werden:
Um die Protokollierung in einem Paket zu aktivieren, müssen Sie auf das Paket Business Intelligence Development Studio (BIDS)
klicken wenn Sie Pakete in SSIS 2005 - 2008 R2 oder SQL Server Data Tools (SSDT)
entwickeln wenn Sie Pakete in SSIS 2012 entwickeln.
Klicken Sie auf SSIS
Menü und klicken Sie dann auf Logging...
Das Dialogfeld "SSIS-Protokolle konfigurieren" wird angezeigt.
Auf der linken Seite können Sie das Paket oder einzelne Aufgaben ankreuzen, um die Ereignisdaten zu protokollieren.
Auf den Anbietern und Protokollen Registerkarte können Sie einen geeigneten Anbieter auswählen, bei dem Sie die Protokollinformationen speichern können. Der folgende Screenshot zeigt, dass Ereignisinformationen in einer SQL Server-Datenbank mithilfe des Verbindungsmanagers OLEDB_PracticeDB
erfasst werden .
Auf den Details Registerkarte können Sie auswählen, welche Ereignisse Sie erfassen möchten. Der folgende Screenshot zeigt, dass ich die folgenden Ereignisse erfasse.
- BeiFehler
- Zur Information
- OnTaskFailed
- OnWarning
Danke an @William Todd Salzman
für die Empfehlung von OnTaskFailed
Veranstaltung
Beispielverpackungsillustration:
Nehmen wir an, wir haben ein Paket namens SO_15004109.dtsx
mit einer Datenflussaufgabe und Skriptaufgabe . Data Flow Task ist nur ein Dummy ohne Komponenten darin.
Die Skriptaufgabe hat den folgenden Code in der Main-Methode, um benutzerdefinierte Informationen, Warn- und Fehlermeldungen auszulösen, damit wir beobachten können, wie sie in der Protokollierungsdatenquelle erfasst werden. Der Code wurde für SSIS 2012 geschrieben, daher müssen Sie ihn möglicherweise für SSIS 2005 ändern. Ich habe mich für VB.NET
entschieden statt C#
weil Sie diese Frage unter sql-server-2005
und SSIS 2005 unterstützt nur VB.NET.
Skriptaufgabencode in VB.NET für SSIS 2005 und höher.
#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
Wenn wir das Paket ausführen, schlägt es fehl, weil wir innerhalb der Skriptaufgabe einen Fehler ausgelöst haben .
Wenn Sie zu der Datenquelle navigieren, in der Sie die Fehler protokolliert haben, werden Sie feststellen, dass SSIS eine Tabelle zum Protokollieren der Informationen erstellt, wenn Sie den SQL Server-Protokollierungsanbieter ausgewählt haben. Die folgende Tabelle listet die Protokollierungstabelle auf, die SSIS in der SQL Server-Datenbank erstellt, die als Protokollanbieter ausgewählt wurde.
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
Die folgende Abfrage wurde in der Datenbank ausgeführt, um die von diesem Beispielpaket erfassten Ereignisse anzuzeigen. Sie werden einige Meldungen doppelt bemerken, da die Ereignisse für jeden Container und jede Aufgabe protokolliert werden. Die Tabelle heißt dbo.sysssislog
da das Paket in SSIS 2012 erstellt wurde.
select id, event, source, message from dbo.sysssislog;
Persönliche Erfahrung mit Protokollierung:
Ich hatte ziemlich guten Erfolg beim Anzeigen der Protokollierungsfehlermeldungen, um zu verstehen, was schief gelaufen ist. Das Debuggen von Paketen in der Produktionsumgebung ist meiner Meinung nach nicht ratsam. Das Erfassen von Protokollereignissen ist jedoch vorzuziehen.
Als ich in SSIS 2005 und 2008 gearbeitet habe, habe ich SSRS-basierte Berichte erstellt, die die Protokolltabelle abfragen, um einen täglichen Bericht über die Auftragsausführungen zu erstellen und einen PDF-Anhang an interessierte Personen zu senden.
Die Dinge haben sich in SSIS 2012 dahingehend verbessert, dass das Tool mit integrierten Berichtsfunktionen mit kommt Katalog für Integrationsdienste
die eine Datenbank namens SSIDB
erstellt .