Integration Services-Protokollierung (SSIS)

SQL Server Integration Services enthält Protokollanbieter, mit denen Sie die Protokollierung in Paketen, Containern und Tasks implementieren können. Mit der Protokollierung können Sie Laufzeitinformationen zu einem Paket aufzeichnen, damit Sie ein Paket bei jeder Ausführung überwachen und Probleme behandeln können. Beispielsweise können in einem Protokoll der Name des Operators, der das Paket ausgeführt hat, und der Zeitpunkt, zu dem die Paketausführung begann und endete, aufgezeichnet werden.

Sie können den Protokollierungsbereich konfigurieren, der während einer Paketausführung auf dem Integration Services-Server auftritt. Weitere Informationen finden Sie unter Aktivieren der Protokollierung für die Paketausführung auf dem SSIS-Server.

Sie können die Protokollierung auch einschließen, wenn Sie ein Paket mit dem dtexec-Eingabeaufforderungs-Hilfsprogramm ausführen. Weitere Informationen zu den Befehlszeilenargumenten, die die Protokollierung unterstützen, finden Sie unter dtexec (Hilfsprogramm).

Konfigurieren der Protokollierung in SQL Server Data Tools

Protokolle werden Paketen zugeordnet und auf Paketebene konfiguriert. Jeder Task oder Container in einem Paket kann Informationen in einem Paketprotokoll protokollieren. Die Tasks und Container in einem Paket können für die Protokollierung auch dann aktiviert werden, wenn das Paket selbst nicht aktiviert ist. Sie können z. B. die Protokollierung für den Task "SQL ausführen" aktivieren, ohne die Protokollierung für das übergeordnete Paket zu aktivieren. Ein Paket, ein Container oder ein Task kann in mehrere Protokolle schreiben. Sie haben die Möglichkeit, die Protokollierung nur für das Paket bzw. für einen beliebigen im Paket enthaltenen Task oder Container zu aktivieren.

Wenn Sie das Protokoll einem Paket hinzufügen, wählen Sie den Protokollanbieter und den Speicherort des Protokolls aus. Der Protokollanbieter gibt das Format für die Protokolldaten an, z. B. eine SQL Server-Datenbank oder eine Textdatei.

Integration Services enthält die folgenden Protokollanbieter:

  • Den Textdatei-Protokollanbieter, der Protokolleinträge in ASCII-Textdateien durch Trennzeichen getrennt im CSV-Format schreibt. Die standardmäßige Dateinamenerweiterung für diesen Anbieter ist LOG.

  • Den SQL Server Profiler-Protokollanbieter, der Ablaufverfolgungen schreibt, die Sie mit SQL Server Profiler anzeigen können. Die standardmäßige Dateinamenerweiterung für diesen Anbieter ist TRC.

    HinweisHinweis

    In einem Paket, das im 64-Bit-Modus ausgeführt wird, kann der SQL Server Profiler-Protokollanbieter nicht verwendet werden.

  • Den SQL Server-Protokollanbieter, der Protokolleinträge in die sysssislog-Tabelle in einer SQL Server-Datenbank schreibt.

  • Den Windows-Ereignisprotokollanbieter, der Einträge in das Anwendungsprotokoll im Windows-Ereignisprotokoll auf dem lokalen Computer schreibt.

  • Den XML-Dateiprotokollanbieter, der Protokolldateien in eine XML-Datei schreibt. Die standardmäßige Dateinamenerweiterung für diesen Anbieter ist XML.

Wenn Sie einem Paket einen Protokollanbieter hinzufügen oder die Protokollierung programmgesteuert konfigurieren, können Sie eine ProgID oder ClassID zum Identifizieren des Protokollanbieters verwenden, statt die vom SSIS-Designer im Dialogfeld SSIS-Protokolle konfigurieren angezeigten Namen zu verwenden.

In der folgenden Tabelle sind die ProgID und die ClassID für die Protokollanbieter von Integration Services aufgeführt, sowie der Speicherort der Protokolle, in die Protokollanbieter schreiben.

Protokollanbieter

ProgID

ClassID

Speicherort

Textdatei

DTS.LogProviderTextFile

{0A039101-ACC1-4E06-943F-279948323883}

Der vom Protokollanbieter verwendete Dateiverbindungs-Manager gibt den Pfad der Textdatei an.

SQL Server Profiler

DTS.LogProviderSQLProfiler

{E93F6300-AE0C-4916-A7BF-A8D0CE12C77A}

Der vom Protokollanbieter verwendete Dateiverbindungs-Manager gibt den Pfad der von SQL Server Profiler verwendeten Textdatei an.

SQL Server

DTS.LogProviderSQLServer

{94150B25-6AEB-4C0D-996D-D37D1C4FDEDA}

Der vom Protokollanbieter verwendete OLE DB-Verbindungs-Manager gibt die SQL Server-Datenbank an, die die sysssislog-Tabelle mit den Protokolleinträgen enthält.

Windows-Ereignisprotokoll

DTS.LogProviderEventLog

{071CC8EB-C343-4CFF-8D58-564B92FCA3CF}

Das Anwendungsprotokoll der Windows-Ereignisanzeige enthält die Integration Services-Protokollinformationen.

XML-Datei

DTS.LogProviderXMLFile

{440945A4-2A22-4F19-B577-EAF5FDDC5F7A}

Der vom Protokollanbieter verwendete Dateiverbindungs-Manager gibt den Pfad der XML-Datei an.

Außerdem können Sie benutzerdefinierte Protokollanbieter erstellen. Weitere Informationen finden Sie unter Erstellen eines benutzerdefinierten Protokollanbieters.

Die Protokollanbieter in einem Paket sind Elemente der Protokollanbieterauflistung des Pakets. Wenn Sie mit dem SSIS-Designer ein Paket erstellen und die Protokollierung implementieren, können Sie eine Liste der Sammelelemente im Ordner Protokollanbieter auf der Registerkarte Paket-Explorer des SSIS-Designers anzeigen.

Zum Konfigurieren eines Protokollanbieters stellen Sie einen Namen und eine Beschreibung für den Protokollanbieter bereit und geben den Verbindungs-Manager an, den der Protokollanbieter verwendet. Der SQL Server-Protokollanbieter verwendet einen OLE DB-Verbindungs-Manager. Für die Textdatei-, SQL Server Profiler- und XML-Datei-Protokollanbieter werden Dateiverbindungs-Manager verwendet. Für den Windows-Ereignisprotokollanbieter wird kein Verbindungs-Manager verwendet, da direkt in das Windows-Ereignisprotokoll geschrieben wird. Weitere Informationen finden Sie unter OLE DB-Verbindungs-Manager und Dateiverbindungs-Manager.

Protokollierungsanpassung

Zum Anpassen der Protokollierung eines Ereignisses oder einer benutzerdefinierten Meldung wird in Integration Services ein Schema häufig protokollierter Informationen bereitgestellt, die in Protokolleinträgen aufgenommen werden. Das Integration Services-Protokollschema definiert die Informationen, die Sie protokollieren können. Für jeden Protokolleintrag können Sie Elemente aus dem Protokollschema auswählen.

Ein Paket und seine Container und Tasks protokollieren nicht dieselben Informationen, und Tasks innerhalb desselben Pakets oder Containers können verschiedene Informationen protokollieren. Ein Paket kann z. B. Operatorinformationen protokollieren, wenn das Paket gestartet wird, ein Task kann die Fehlerquelle des Tasks protokollieren, und ein weiterer Task kann Informationen protokollieren, wenn Fehler auftreten. Wenn ein Paket und seine Container mehrere Protokolle verwenden, werden dieselben Informationen in alle Protokolle geschrieben.

Sie können einen Protokolliergrad auswählen, der Ihren Anforderungen entspricht, indem Sie die zu protokollierenden Ereignisse und die für jedes Ereignis zu protokollierenden Informationen festlegen. Eventuell enthalten Ihrer Meinung nach einige Ereignisse nützlichere Informationen als andere. Vielleicht möchten Sie z. B. nur die Computer- und Operatornamen für das PreExecute-Ereignis protokollieren, für das Error-Ereignis jedoch alle verfügbaren Informationen.

Damit die Protokolldateien keine großen Speichermengen belegen oder um eine zu umfangreiche Protokollierung zu vermeiden, was zu einer Leistungsverschlechterung führen könnte, können Sie die Protokollierung einschränken, indem Sie bestimmte zu protokollierende Ereignisse und Informationen auswählen. So können Sie z. B. ein Protokoll konfigurieren, das nur das Datum und den Computernamen für einen Fehler erfasst.

In SSIS-Designer legen Sie die Protokollierungsoptionen im Dialogfeld SSIS-Protokolle konfigurieren fest.

Protokollschema

In der folgenden Tabelle werden die Elemente im Protokollschema beschrieben.

Element

Beschreibung

Computer

Der Name des Computers, auf dem das Protokollereignis auftrat.

Operator

Die Identität des Benutzers, der das Paket gestartet hat.

SourceName

Der Name des Containers oder des Tasks, für den das Protokollereignis auftrat.

SourceID

Der eindeutige Bezeichner des Pakets; der For-Schleifen-, Foreach-Schleifen- oder Sequenz-Container; oder der Task, für den das Protokollereignis auftrat.

ExecutionID

Die GUID der Paketausführungsinstanz.

HinweisHinweis

Beim Ausführen eines einzelnen Pakets werden möglicherweise Protokolleinträge mit anderen Werten für das ExecutionID-Element erstellt. Wenn Sie ein Paket beispielsweise in SQL Server-Datentools ausführen, werden in der Überprüfungsphase möglicherweise Protokolleinträge mit einem ExecutionID-Element erstellt, das SQL Server-Datentools entspricht. In der Ausführungsphase werden jedoch unter Umständen Protokolleinträge mit einem ExecutionID-Element erstellt, das dtshost.exe entspricht. Um ein weiteres Beispiel zu geben, können Sie ein Paket ausführen, das Tasks vom Typ "Paket ausführen" enthält, wobei von jedem dieser Tasks ein untergeordnetes Paket ausgeführt wird. Diese untergeordneten Pakete erstellen möglicherweise Protokolleinträge mit einem anderen ExecutionID-Element als in den vom übergeordneten Paket erstellten Protokolleinträgen.

MessageText

Eine dem Protokolleintrag zugeordnete Meldung.

DataBytes

Ein für den Protokolleintrag spezifisches Bytearray. Die Bedeutung dieses Felds variiert je nach Protokolleintrag.

Die folgende Tabelle beschreibt drei zusätzliche Elemente des Protokollschemas, die auf der Registerkarte Details des Dialogfensters SSIS-Protokolle konfigurieren nicht verfügbar sind.

Element

Beschreibung

StartTime

Der Zeitpunkt, zu dem der Container oder der Task die Ausführung beginnt.

EndTime

Der Zeitpunkt, zu dem der Container oder der Task die Ausführung beendet.

DataCode

Ein optionaler ganzzahliger Wert, typischerweise ein Wert aus der DTSExecResult-Enumeration, der das Ergebnis der Ausführung des Containers oder des Tasks angibt:

  • 0 – Erfolg

  • 1 – Fehlschlag

  • 2 – Abgeschlossen

  • 3 – Abgebrochen

Protokolleinträge

Integration Services unterstützt Protokolleinträge für vordefinierte Ereignisse und stellt für viele Integration Services-Objekte benutzerdefinierte Protokolleinträge bereit. Im Dialogfeld SSIS-Protokolle konfigurieren des SSIS-Designers werden diese Ereignisse und benutzerdefinierten Protokolleinträge aufgelistet.

In der folgenden Tabelle werden die vordefinierten Ereignisse beschrieben, die beim Auftreten von Laufzeitereignissen zum Schreiben von Protokolleinträgen aktiviert werden können. Diese Protokolleinträge gelten für ausführbare Dateien, das Paket sowie die im Paket enthaltenen Tasks und Container. Der Name des Protokolleintrags entspricht dem Namen des ausgelösten Laufzeitereignisses, mit dem das Schreiben des Protokolleintrags verursacht wurde.

Ereignisse

Beschreibung

OnError

Schreibt einen Protokolleintrag, wenn ein Fehler auftritt.

OnExecStatusChanged

Schreibt einen Protokolleintrag, wenn ein Task (nicht ein Container) während des Debuggens angehalten oder wieder aufgenommen wurde.

OnInformation

Schreibt einen Protokolleintrag während der Prüfung und Ausführung einer ausführbaren Datei, um Informationen zu melden.

OnPostExecute

Schreibt einen Protokolleintrag unmittelbar nach Beendigung der Ausführung der ausführbaren Datei.

OnPostValidate

Schreibt einen Protokolleintrag, wenn die Überprüfung der ausführbaren Datei beendet ist.

OnPreExecute

Schreibt einen Protokolleintrag unmittelbar vor Ausführung der ausführbaren Datei.

OnPreValidate

Schreibt einen Protokolleintrag, wenn die Überprüfung der ausführbaren Datei beginnt.

OnProgress

Schreibt einen Protokolleintrag, wenn die ausführbare Datei einen messbaren Fortschritt gemacht hat.

OnQueryCancel

Schreibt einen Protokolleintrag für jeden Punkt in der Taskverarbeitung, an dem ein Abbruch der Ausführung sinnvoll ist.

OnTaskFailed

Schreibt einen Protokolleintrag, wenn ein Task fehlschlägt.

OnVariableValueChanged

Schreibt einen Protokolleintrag, wenn sich der Wert einer Variablen ändert.

OnWarning

Schreibt einen Protokolleintrag, wenn eine Warnung auftritt.

PipelineComponentTime

Schreibt für jede Datenflusskomponente einen Protokolleintrag für jede Phase der Überprüfung und der Ausführung. Der Protokolleintrag gibt die Verarbeitungszeit für jede Phase an.

Diagnostic

Schreibt einen Protokolleintrag, der Diagnoseinformationen enthält.

Sie können zum Beispiel vor und nach jedem Aufruf eines externen Datenanbieters eine Meldung protokollieren. Weitere Informationen finden Sie unter Behandlung von Problemen mit Paketausführungstools.

Das Paket und viele Tasks verfügen über benutzerdefinierte Protokolleinträge, die für die Protokollierung aktiviert werden können. Der Task Mail senden stellt z. B. den benutzerdefinierten Protokolleintrag SendMailTaskBegin bereit, mit dem Informationen protokolliert werden, wenn die Ausführung des Tasks Mail senden begonnen, jedoch bevor eine E-Mail-Nachricht gesendet wird. Weitere Informationen finden Sie unter Benutzerdefinierte Meldungen für die Protokollierung.

Unterscheiden von Paketkopien

Protokolldaten schließen den Namen und den GUID des Pakets ein, zu dem die Protokolleinträge gehören. Beim Erstellen eines neuen Pakets durch Kopieren eines vorhandenen Pakets werden Name und GUID des vorhandenen Pakets ebenfalls kopiert. Folglich können GUID und Name zweier Pakete identisch sein, sodass die Pakete in den Protokolldaten schwer voneinander zu unterscheiden sind.

Sie sollten den Namen und GUID der neuen Pakete ändern, um diese Mehrdeutigkeit zu umgehen. Sie können in SQL Server-Datentools (SSDT) mithilfe des Eigenschaftenfensters den GUID in der ID-Eigenschaft neu generieren und den Wert der Name-Eigenschaft aktualisieren. Sie haben auch die Möglichkeit, den GUID und Namen programmgesteuert oder mit dem Hilfsprogramm dtutil zu ändern. Weitere Informationen finden Sie unter Festlegen von Paketeigenschaften und dtutil (Hilfsprogramm).

Übergeordnete Protokollierungsoptionen

Häufig entsprechen die Protokollierungsoptionen von Tasks und For-Schleifen-, Foreach-Schleifen- und Sequenz-Containern denen des Paketcontainers oder eines übergeordneten Containers. In diesem Fall können Sie diese so konfigurieren, dass sie die Protokollierungsoptionen von ihrem übergeordneten Container erben. In einem For-Schleifen-Container, der den Task "SQL ausführen" enthält, kann z. B. der Task "SQL ausführen" die Protokollierungsoptionen verwenden, die für den For-Schleifen-Container festgelegt werden. Um die übergeordneten Protokollierungsoptionen zu verwenden, legen Sie die LoggingMode-Eigenschaft des Containers auf UseParentSetting fest. Sie können diese Eigenschaft im Fenster Eigenschaften von SQL Server-Datentools (SSDT) oder im Dialogfeld SSIS-Protokolle konfigurieren in SSIS-Designer festlegen.

Protokollierungsvorlagen

Im Dialogfeld SSIS-Protokolle konfigurieren können Sie auch häufig verwendete Protokollierungskonfigurationen als Vorlagen erstellen und speichern und die Vorlagen dann in mehreren Paketen verwenden. So ist es einfach, eine konsequente Protokollierungsstrategie für mehrere Pakete anzuwenden und Protokolleinstellungen für Pakete zu ändern, indem die Vorlagen aktualisiert und dann angewendet werden. Die Vorlagen werden als XML-Dateien gespeichert.

So konfigurieren Sie die Protokollierung im Dialogfeld "SSIS-Protokolle konfigurieren"

  1. Aktivieren Sie das Paket und seine Tasks für die Protokollierung. Die Protokollierung kann auf Paket-, Container- und Taskebene stattfinden. Sie können verschiedene Protokolle für Pakete, Container und Tasks angeben.

  2. Wählen Sie einen Protokollanbieter aus, und fügen Sie ein Protokoll für das Paket hinzu. Protokolle können nur auf Paketebene erstellt werden, und ein Task oder Container muss eines der für das Paket erstellten Protokolle verwenden. Jedes Protokoll ist einem der folgenden Protokollanbieter zugeordnet: Textdatei, SQL Server Profiler, SQL Server, Windows-Ereignisprotokoll oder XML-Datei. Weitere Informationen finden Sie unter Aktivieren der Paketprotokollierung in SQL Server Data Tools.

  3. Wählen Sie die Ereignisse und die Protokollschemainformationen zu jedem Ereignis aus, das Sie im Protokoll erfassen möchten. Weitere Informationen finden Sie unter Konfigurieren der Protokollierung mithilfe einer gespeicherten Konfigurationsdatei.

Konfiguration des Protokollanbieters

Sie können Eigenschaften mit dem SSIS-Designer oder programmgesteuert festlegen.

Ein Protokollanbieter wird als ein Schritt beim Implementieren der Protokollierung in einem Paket erstellt und konfiguriert. Weitere Informationen finden Sie unter Integration Services-Protokollierung (SSIS).

Nachdem Sie einen Protokollanbieter erstellt haben, können Sie dessen Eigenschaften im Eigenschaftenfenster von SQL Server-Datentools (SSDT) anzeigen und ändern.

Weitere Informationen zum programmgesteuerten Festlegen dieser Eigenschaften finden Sie in der Dokumentation zur LogProvider-Klasse.

Protokollierung von Datenflusstasks

Der Datenflusstask stellt eine Reihe von benutzerdefinierten Protokolleinträge bereit, die zum Überwachen und Anpassen der Leistung verwendet werden können. Sie können beispielsweise Komponenten überwachen, die möglicherweise Arbeitsspeicherverluste verursachen, oder nachverfolgen, wie lange das Ausführen einer bestimmten Komponente dauert. Eine Liste dieser benutzerdefinierten Protokolleinträge sowie Beispiele für Protokollausgaben finden Sie unter Datenflusstask.

Verwenden des PipelineComponentTime-Ereignisses

Das PipelineComponentTime-Ereignis stellt möglicherweise den nützlichsten benutzerdefinierten Protokolleintrag dar. Dieser Protokolleintrag meldet den Zeitaufwand in Millisekunden, den jede Komponente im Datenfluss für die fünf Hauptverarbeitungsschritte jeweils aufbringt. In der folgenden Tabelle werden diese Verarbeitungsschritte beschrieben. Integration Services-Entwickler kennen diese Schritte als Hauptmethoden von PipelineComponent.

Schritt

Beschreibung

Überprüfen

Die Komponente überprüft Eigenschaftswerte und Konfigurationseinstellungen auf ihre Gültigkeit.

PreExecute

Die Komponente führt eine einmalige Verarbeitung aus, bevor sie mit der Verarbeitung von Datenzeilen beginnt.

PostExecute

Die Komponente führt eine einmalige Verarbeitung aus, nachdem alle Datenzeilen verarbeitet wurden.

ProcessInput

Die Transformations- oder Zielkomponente verarbeitet die eingehenden Datenzeilen, die von einer Upstreamquelle oder einer Transformation an sie übergeben wurden.

PrimeOutput

Die Quell- oder Transformationskomponente füllt die Puffer von Daten auf, die an eine Downstreamtransformation oder eine Zielkomponente übergeben werden sollen.

Wenn Sie das PipelineComponentTime-Ereignis aktivieren, protokolliert Integration Services eine Meldung für jeden der von den einzelnen Komponenten ausgeführten Verarbeitungsschritt. Die folgenden Protokolleinträge zeigen eine Teilmenge der Meldungen, die vom Integration Services CalculatedColumns-Paketbeispiel protokolliert werden:

The component "Calculate LineItemTotalCost" (3522) spent 356 milliseconds in ProcessInput.

The component "Sum Quantity and LineItemTotalCost" (3619) spent 79 milliseconds in ProcessInput.

The component "Calculate Average Cost" (3662) spent 16 milliseconds in ProcessInput.

The component "Sort by ProductID" (3717) spent 125 milliseconds in ProcessInput.

The component "Load Data" (3773) spent 0 milliseconds in ProcessInput.

The component "Extract Data" (3869) spent 688 milliseconds in PrimeOutput filling buffers on output "OLE DB Source Output" (3879).

The component "Sum Quantity and LineItemTotalCost" (3619) spent 141 milliseconds in PrimeOutput filling buffers on output "Aggregate Output 1" (3621).

The component "Sort by ProductID" (3717) spent 16 milliseconds in PrimeOutput filling buffers on output "Sort Output" (3719).

Diese Protokolleinträge zeigen, dass der Datenflusstask den größten Zeitaufwand für die folgenden, hier in absteigender Reihenfolge gezeigten Schritte benötigt hat:

  • Die OLE DB-Quelle mit dem Namen "Extract Data" hat 688 Millisekunden für das Laden von Daten benötigt.

  • Die Transformation für abgeleitete Spalten mit dem Namen "Calculate LineItemTotalCost" hat 356 Millisekunden für das Durchführen von Berechnungen für eingehende Zeilen benötigt.

  • Die Transformation für das Aggregieren mit dem Namen "Sum Quantity and LineItemTotalCost" hat insgesamt 220 Millisekunden – 141 für den PrimeOutput- und 79 für den ProcessInput-Schritt – benötigt, um Berechnungen durchzuführen und die Daten an die nächste Transformation zu übergeben.

Verwandte Aufgaben

Die folgende Liste enthält Links zu Themen, die die Ausführung von Tasks in Verbindung mit der Protokollierungsfunktion beschreiben.

Verwandte Inhalte

Integration Services (kleines Symbol) Bleiben Sie mit Integration Services auf dem neuesten Stand

Die neuesten Downloads, Artikel, Beispiele und Videos von Microsoft sowie ausgewählte Lösungen aus der Community finden Sie auf MSDN auf der Integration Services-Seite:


Abonnieren Sie die auf der Seite verfügbaren RSS-Feeds, um automatische Benachrichtigungen zu diesen Updates zu erhalten.

DTLoggedExec-Tool für vollständige und Detailprotokollierung (CodePlex-Projekt)

Siehe auch

Aufgaben

Anzeigen der Protokolleinträge im Fenster 'Protokollereignisse'