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