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.
På 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
.
På 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 sql-server-2005
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
.