sql >> Databasteknik >  >> RDS >> Sqlserver

Kan du övervaka exekveringen av ett SSIS-paket, i BIDS, när det körs på servern?

Möjligt alternativ:

Du måste använda Logging funktion i SSIS. Det låter dig konfigurera de händelser som du vill fånga meddelanden för. Jag föredrar vanligtvis loggen OnWarning och OnError för att hålla reda på alla varnings- och felmeddelanden som förekommer i paketet. Du har olika leverantörer för att spara loggdata. Jag föredrar att använda SQL Server så att jag kan fråga efter loggningsinformationen.

Loggningsalternativ som visas från SSIS 2012:

För att aktivera inloggning av ett paket måste du klicka på paketet Business Intelligence Development Studio (BIDS) om du utvecklar paket i SSIS 2005 - 2008 R2 eller SQL Server Data Tools (SSDT) om du utvecklar paket i SSIS 2012.

Klicka på SSIS menyn och klicka sedan på Logging...

Du kommer att se dialogrutan Konfigurera SSIS-loggar.

På vänster sida kan du kontrollera paketet eller enskilda uppgifter för att logga händelsedata.

Providers och loggar fliken kan du välja en lämplig leverantör till vilken du kan spara logginformationen. Skärmbilden nedan visar att händelseinformation fångas i en SQL Server-databas med anslutningshanteraren OLEDB_PracticeDB .

Detaljer fliken kan du välja vilka händelser du vill fånga. Skärmbilden nedan visar att jag fångar följande händelser.

  • OnError
  • OnInformation
  • OnTaskFailed
  • OnWarning

Tack till @William Todd Salzman för att du har rekommenderat OnTaskFailed händelse

Exempel på paketillustration:

Låt oss säga att vi har ett paket som heter SO_15004109.dtsx med en Dataflödesuppgift och Skriptuppgift . Data Flow Task är bara en dummy utan några komponenter inuti.

Skriptuppgiften har följande kod i huvudmetoden för att skicka anpassad information, varnings- och felmeddelanden så att vi kan observera hur den fångas i loggningsdatakällan. Koden är skriven för SSIS 2012 så du kan behöva ändra den för SSIS 2005. Jag valde VB.NET istället för C# eftersom du har taggat den här frågan under och SSIS 2005 stöder endast VB.NET.

Skriptuppgiftskod i VB.NET för SSIS 2005 och senare.

#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

Om vi ​​kör paketet kommer det att misslyckas eftersom vi skapade ett fel i Script Task .

Om du navigerar till datakällan där du loggade felen kommer du att märka att SSIS skapar en tabell för att logga informationen om du valde SQL Server-loggningsleverantör. Tabellen nedan visar loggningstabellen som SSIS skapar i SQL Server-databasen som valts som loggleverantör.

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

Frågan nedan kördes i databasen för att se händelserna som fångats av detta exempelpaket. Du kommer att märka några meddelanden två gånger eftersom händelserna loggas för varje behållare och uppgift. Tabellen heter dbo.sysssislog eftersom paketet skapades i SSIS 2012.

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

Personlig erfarenhet av loggning:

Jag har haft ganska bra framgång med att bara titta på loggningsfelmeddelandena för att förstå vad som gick fel. Att felsöka paket i produktionsmiljö är inte tillrådligt, enligt min mening. Det är dock att föredra att fånga logghändelser.

När jag arbetade i SSIS 2005 och 2008, har jag skapat SSRS-baserade rapporter som frågar loggtabellen för att generera dagliga rapporter om jobbutföranden och skicka en PDF-bilaga till personer av intresse.

Saker och ting har förbättrats i SSIS 2012 att verktyget kommer med inbyggda rapporteringsfunktioner med Integrationstjänstkatalog som skapar en databas med namnet SSIDB .



  1. FÖR UPPDATERING v/s LÅS I DELNINGSLÄGE:Tillåt samtidiga trådar att läsa uppdaterat tillståndsvärde för låst rad

  2. Uppdatera en rad i ett radpar, där båda raderna tillsammans uppfyller vissa kriterier

  3. Oracle TO_DATE kastar INTE fel

  4. MySQL:hur man får skillnaden mellan två tidsstämplar på sekunder