Možná možnost:
Musíte použít Logging
funkce v SSIS. Umožňuje vám nakonfigurovat události, pro které chcete zprávy zachytit. Obvykle dávám přednost logu OnWarning
a OnError
abyste měli přehled o všech varovných a chybových zprávách, které se vyskytují v balíčku. Máte různého poskytovatele, který ukládá data protokolování. Dávám přednost použití SQL Serveru, abych se mohl dotazovat na protokolované informace.
Možnosti protokolování zobrazené od SSIS 2012:
Chcete-li povolit přihlášení k balíčku, musíte kliknout na balíček Business Intelligence Development Studio (BIDS)
pokud vyvíjíte balíčky v SSIS 2005 - 2008 R2 nebo SQL Server Data Tools (SSDT)
pokud vyvíjíte balíčky v SSIS 2012.
Klikněte na SSIS
a poté klikněte na Logging...
Zobrazí se dialogové okno Konfigurace protokolů SSIS.
Na levé straně můžete zkontrolovat balíček nebo jednotlivé úkoly a zaznamenat data událostí.
Na stránce Poskytovatelé a protokoly můžete vybrat příslušného poskytovatele, ke kterému můžete uložit informace protokolu. Níže uvedený snímek obrazovky ukazuje, že informace o událostech jsou zachyceny v databázi SQL Server pomocí správce připojení OLEDB_PracticeDB
.
Na stránce Podrobnosti můžete vybrat události, které chcete zachytit. Níže uvedený snímek obrazovky ukazuje, že zachycuji následující události.
- OnError
- OnInformation
- OnTaskFailed
- OnWarning
Díky @William Todd Salzman
za doporučení OnTaskFailed
událost
Ukázková ilustrace balíčku:
Řekněme, že máme balíček s názvem SO_15004109.dtsx
s úlohou toku dat a Úloha skriptu . Data Flow Task je jen figurína, která neobsahuje žádné součásti.
Úloha skriptu má v metodě Main následující kód pro spouštění vlastních informací, varování a chybových zpráv, takže můžeme sledovat, jak je zachycena ve zdroji dat protokolování. Kód je napsán pro SSIS 2012, takže jej možná budete muset změnit pro SSIS 2005. Vybral jsem VB.NET
místo C#
protože jste tuto otázku označili pod sql-server-2005
a SSIS 2005 podporuje pouze VB.NET.
Kód Script Task ve VB.NET pro SSIS 2005 a vyšší.
#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
Pokud balíček spustíme, selže, protože jsme vyvolali chybu v úkolu skriptu .
Pokud přejdete ke zdroji dat, do kterého jste zaprotokolovali chyby, všimnete si, že SSIS vytvoří tabulku pro protokolování informací, pokud jste zvolili poskytovatele protokolování SQL Server. Níže uvedená tabulka uvádí tabulku protokolování, kterou SSIS vytváří v databázi SQL Server vybrané jako poskytovatel protokolu.
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
Níže uvedený dotaz byl proveden v databázi pro zobrazení událostí zachycených tímto ukázkovým balíčkem. Některé zprávy si všimnete dvakrát, protože události jsou protokolovány pro každý kontejner a úkoly. Tabulka se jmenuje dbo.sysssislog
protože balíček byl vytvořen v SSIS 2012.
select id, event, source, message from dbo.sysssislog;
Osobní zkušenost s protokolováním:
Měl jsem docela dobrý úspěch při pouhém prohlížení chybových zpráv protokolování, abych pochopil, co se pokazilo. Ladění balíčků v produkčním prostředí se podle mého názoru nedoporučuje. Je však vhodnější zaznamenávat události protokolu.
Když jsem pracoval v SSIS 2005 a 2008, vytvořil jsem sestavy založené na SSRS, které se dotazují na tabulku protokolů za účelem generování denních zpráv o provádění úloh a odesílání přílohy ve formátu PDF osobám, které nás zajímají.
Věci se v SSIS 2012 zlepšily, protože tento nástroj přichází s vestavěnými funkcemi vytváření sestav s Katalog integračních služeb
který vytvoří databázi s názvem SSIDB
.