Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Können Sie die Ausführung eines SSIS-Pakets in BIDS überwachen, während es auf dem Server ausgeführt wird?

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 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 .