Mogelijke optie:
U moet gebruik maken van Logging
functie in SSIS. Hiermee kunt u de gebeurtenissen configureren waarvoor u de berichten wilt vastleggen. Ik geef meestal de voorkeur aan het logboek OnWarning
en OnError
om alle waarschuwingen en foutmeldingen die in het pakket voorkomen bij te houden. Je hebt verschillende providers om de loggegevens op te slaan. Ik gebruik liever SQL Server zodat ik de loggegevens kan opvragen.
Opnameopties getoond vanaf SSIS 2012:
Om inloggen in een pakket in te schakelen, moet u op het pakket Business Intelligence Development Studio (BIDS)
klikken als u pakketten ontwikkelt in SSIS 2005 - 2008 R2 of SQL Server Data Tools (SSDT)
als u pakketten ontwikkelt in SSIS 2012.
Klik op SSIS
menu en klik vervolgens op Logging...
U ziet het dialoogvenster SSIS-logboeken configureren.
Aan de linkerkant kunt u het pakket of individuele taken controleren om de gebeurtenisgegevens te loggen.
Op de Aanbieders en logboeken tabblad, kunt u een geschikte provider selecteren waarin u de loggegevens kunt opslaan. De onderstaande schermafbeelding laat zien dat gebeurtenisinformatie wordt vastgelegd in een SQL Server-database met behulp van de verbindingsmanager OLEDB_PracticeDB
.
Op de Details tabblad, kunt u selecteren welke gebeurtenissen u wilt vastleggen. De onderstaande schermafbeelding laat zien dat ik de volgende gebeurtenissen vastleg.
- OnError
- OnInformation
- OnTaskFailed
- OnWarning
Met dank aan @William Todd Salzman
voor het aanbevelen van OnTaskFailed
evenement
Voorbeeld pakket illustratie:
Laten we zeggen dat we een pakket hebben met de naam SO_15004109.dtsx
met een Gegevensstroomtaak en Scripttaak . Gegevensstroomtaak is slechts een dummy zonder componenten erin.
Scripttaak heeft de volgende code in de Main-methode om aangepaste informatie, waarschuwingen en foutmeldingen af te vuren, zodat we kunnen zien hoe deze wordt vastgelegd in de logboekgegevensbron. De code is geschreven voor SSIS 2012, dus het kan zijn dat je deze moet wijzigen voor SSIS 2005. Ik koos voor VB.NET
in plaats van C#
omdat je deze vraag hebt getagd onder sql-server-2005
en SSIS 2005 ondersteunt alleen VB.NET.
Scripttaakcode in VB.NET voor SSIS 2005 en hoger.
#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
Als we het pakket uitvoeren, zal het mislukken omdat we een fout hebben gemaakt in de Scripttaak .
Als u naar de gegevensbron navigeert waar u de fouten hebt geregistreerd, zult u merken dat SSIS een tabel maakt om de informatie te loggen als u de SQL Server-logboekregistratieprovider kiest. Onderstaande tabel geeft een overzicht van de logtabel die SSIS aanmaakt in de SQL Server-database die is gekozen als logprovider.
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
Onderstaande query is uitgevoerd in de database om de gebeurtenissen te bekijken die door dit voorbeeldpakket zijn vastgelegd. U zult sommige berichten twee keer opmerken omdat de gebeurtenissen voor elke container en taak worden vastgelegd. De tabel heet dbo.sysssislog
omdat het pakket is gemaakt in SSIS 2012.
select id, event, source, message from dbo.sysssislog;
Persoonlijke ervaring met loggen:
Ik heb redelijk goed succes gehad door alleen de log-foutmeldingen te bekijken om te begrijpen wat er mis ging. Het debuggen van pakketten in de productieomgeving is naar mijn mening niet aan te raden. Het vastleggen van logboekgebeurtenissen heeft echter de voorkeur.
Toen ik in SSIS 2005 en 2008 werkte, heb ik op SSRS gebaseerde rapporten gemaakt die de logtabel doorzoeken om dagelijks een rapport van de taakuitvoeringen te genereren en een PDF-bijlage naar geïnteresseerde personen te sturen.
In SSIS 2012 zijn dingen verbeterd dat de tool wordt geleverd met ingebouwde rapportagemogelijkheden met Integratiedienstencatalogus
die een database aanmaakt met de naam SSIDB
.