Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy możesz monitorować wykonywanie pakietu SSIS w BIDS, gdy działa on na serwerze?

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 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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć krok w moim zadaniu agenta programu SQL Server, który będzie uruchamiał mój pakiet SSIS?

  2. Jak zdecydować, kiedy użyć indeksu w kolumnie tabeli?

  3. wybrać ten sam dzień każdego miesiąca przez następne 5 lat przy użyciu SQL?

  4. SQL Server:Szybkie zapytania, ale wolne od procedury

  5. Dlaczego SQL Server 2008 blokuje SELECT przy długich transakcjach INSERT?