sql >> Database teknologi >  >> RDS >> Sqlserver

Kan du overvåge udførelsen af ​​en SSIS-pakke, i BIDS, som den kører på serveren?

Mulig mulighed:

Du skal gøre brug af Logging funktion i SSIS. Det giver dig mulighed for at konfigurere de begivenheder, som du gerne vil fange beskederne til. Jeg foretrækker normalt loggen OnWarning og OnError at holde styr på alle de advarsler og fejlmeddelelser, der opstår i pakken. Du har forskellige udbydere til at gemme logdataene. Jeg foretrækker at bruge SQL Server, så jeg kan forespørge på logningsoplysningerne.

Logningsmuligheder vist fra SSIS 2012:

For at aktivere logning af en pakke skal du klikke på pakken Business Intelligence Development Studio (BIDS) hvis du udvikler pakker i SSIS 2005 - 2008 R2 eller SQL Server Data Tools (SSDT) hvis du udvikler pakker i SSIS 2012.

Klik på SSIS menuen, og klik derefter på Logging...

Du vil se dialogboksen Konfigurer SSIS-logfiler.

På venstre side kan du tjekke pakken eller individuelle opgaver for at logge hændelsesdataene.

Udbydere og logfiler fanen, kan du vælge en passende udbyder, som du kan gemme logoplysningerne til. Nedenstående skærmbillede viser, at hændelsesinformation er fanget i en SQL Server-database ved hjælp af forbindelsesadministratoren OLEDB_PracticeDB .

Detaljer fanen, kan du vælge, hvilke begivenheder du vil fange. Nedenstående skærmbillede viser, at jeg fanger følgende begivenheder.

  • Ved fejl
  • OnInformation
  • OnTaskFailed
  • OnWarning

Tak til @William Todd Salzman for at anbefale OnTaskFailed begivenhed

Eksempel på pakkeillustration:

Lad os sige, at vi har en pakke ved navn SO_15004109.dtsx med en Dataflow-opgave og Scriptopgave . Data Flow Task er bare en dummy uden komponenter indeni.

Script-opgaven har følgende kode i Main-metoden til at udløse tilpassede oplysninger, advarsler og fejlmeddelelser, så vi kan observere, hvordan det er fanget i logdatakilden. Koden er skrevet til SSIS 2012, så du skal muligvis ændre den til SSIS 2005. Jeg valgte VB.NET i stedet for C# fordi du har tagget dette spørgsmål under og SSIS 2005 understøtter kun VB.NET.

Scriptopgavekode i VB.NET til SSIS 2005 og nyere.

#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

Hvis vi udfører pakken, vil den mislykkes, fordi vi rejste en fejl i Scriptopgaven .

Hvis du navigerer til den datakilde, hvor du loggede fejlene, vil du bemærke, at SSIS opretter en tabel til at logge oplysningerne, hvis du vælger SQL Server-logningsudbyder. Nedenstående tabel viser den logningstabel, som SSIS opretter i den SQL Server-database, der er valgt til at være log-udbyderen.

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

Nedenstående forespørgsel blev udført i databasen for at se hændelser fanget af denne eksempelpakke. Du vil bemærke nogle meddelelser to gange, fordi begivenhederne logges for hver container og opgave. Tabellen hedder dbo.sysssislog fordi pakken blev oprettet i SSIS 2012.

select id, event, source, message from dbo.sysssislog;

Personlig erfaring med logning:

Jeg har haft ret god succes med bare at se logningsfejlmeddelelserne for at forstå, hvad der gik galt. Fejlretning af pakker i produktionsmiljø er efter min mening ikke tilrådeligt. Det er dog at foretrække at registrere loghændelser.

Da jeg arbejdede i SSIS 2005 og 2008, har jeg lavet SSRS-baserede rapporter, der forespørger log-tabellen for at generere daglige rapporter om jobudførelser og sende en PDF-vedhæftet fil til personer af interesse.

Tingene er blevet forbedret i SSIS 2012, idet værktøjet kommer med indbyggede rapporteringsfunktioner med Integrationsservicekatalog der opretter en database ved navn SSIDB .



  1. Henter Oracle alle rækkerne, før de evaluerer rownum?

  2. Behandling af MySQL-resultat i bash

  3. Søg post med apostrof i mysql lignende forespørgsel

  4. SQL - Tjek om en kolonne automatisk stiger