Możliwa opcja:
Musisz skorzystać z Logging
funkcja w SSIS. Pozwala skonfigurować zdarzenia, dla których chcesz przechwycić wiadomości. Zwykle wolę dziennik OnWarning
i OnError
aby śledzić wszystkie ostrzeżenia i komunikaty o błędach, które występują w pakiecie. Masz różnych dostawców do zapisywania danych logowania. Wolę używać SQL Server, aby móc wysyłać zapytania o informacje dotyczące rejestrowania.
Opcje logowania pokazane z SSIS 2012:
Aby włączyć logowanie do pakietu, musisz kliknąć pakiet Business Intelligence Development Studio (BIDS)
jeśli tworzysz pakiety w SSIS 2005 - 2008 R2 lub SQL Server Data Tools (SSDT)
jeśli tworzysz pakiety w SSIS 2012.
Kliknij SSIS
menu, a następnie kliknij Logging...
Zobaczysz okno dialogowe Konfiguruj dzienniki SSIS.
Po lewej stronie możesz sprawdzić pakiet lub poszczególne zadania, aby zarejestrować dane zdarzenia.
W Dostawcach i dziennikach można wybrać odpowiedniego dostawcę, do którego można zapisać informacje o logu. Poniższy zrzut ekranu pokazuje, że informacje o zdarzeniach są przechwytywane w bazie danych programu SQL Server przy użyciu menedżera połączeń OLEDB_PracticeDB
.
Szczegóły możesz wybrać, które zdarzenia chcesz uchwycić. Poniższy zrzut ekranu pokazuje, że przechwytuję następujące wydarzenia.
- Przy błędzie
- Informacje
- Nieudane zadanie
- Ostrzeżenie
Podziękowania dla @William Todd Salzman
za polecanie OnTaskFailed
wydarzenie
Przykładowa ilustracja pakietu:
Załóżmy, że mamy pakiet o nazwie SO_15004109.dtsx
z zadaniem przepływu danych i Zadanie skryptu . Zadanie przepływu danych jest tylko atrapą bez żadnych komponentów w środku.
Zadanie skryptu ma następujący kod w metodzie Main do uruchamiania niestandardowych informacji, ostrzeżeń i komunikatów o błędach, dzięki czemu możemy obserwować, jak są one przechwytywane w źródle danych logowania. Kod jest napisany dla SSIS 2012, więc być może trzeba będzie go zmienić dla SSIS 2005. Wybrałem VB.NET
zamiast C#
ponieważ oznaczyłeś to pytanie pod serwer-sql-2005
a SSIS 2005 obsługuje tylko VB.NET.
Kod zadania skryptu w VB.NET dla SSIS 2005 i nowszych.
#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
Jeśli wykonamy pakiet, zakończy się niepowodzeniem, ponieważ zgłosiliśmy błąd w zadaniu skryptowym .
Jeśli przejdziesz do źródła danych, w którym zarejestrowano błędy, zauważysz, że SSIS tworzy tabelę do rejestrowania informacji, jeśli wybierzesz dostawcę rejestrowania programu SQL Server. Poniższa tabela zawiera tabelę rejestrowania, którą SSIS tworzy w bazie danych SQL Server wybranej jako dostawca dziennika.
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
Poniższe zapytanie zostało wykonane w bazie danych, aby wyświetlić zdarzenia przechwycone przez ten przykładowy pakiet. Niektóre wiadomości zauważysz dwukrotnie, ponieważ zdarzenia są rejestrowane dla każdego kontenera i zadania. Tabela nosi nazwę dbo.sysssislog
ponieważ pakiet został stworzony w SSIS 2012.
select id, event, source, message from dbo.sysssislog;
Osobiste doświadczenie z logowaniem:
Odniosłem dość dobry sukces, po prostu wyświetlając komunikaty o błędach rejestrowania, aby zrozumieć, co poszło nie tak. Moim zdaniem debugowanie pakietów w środowisku produkcyjnym nie jest wskazane. Jednak przechwytywanie zdarzeń dziennika jest preferowane.
Kiedy pracowałem w SSIS 2005 i 2008, stworzyłem raporty oparte na SSRS, które odpytują tabelę dziennika, aby wygenerować dzienny raport z wykonania zadań i wysłać załącznik PDF do osób zainteresowanych.
W SSIS 2012 poprawiło się to, że narzędzie ma wbudowane funkcje raportowania z Katalog usług integracyjnych
który tworzy bazę danych o nazwie SSIDB
.