sql >> Databáze >  >> RDS >> Sqlserver

Můžete sledovat provádění balíčku SSIS v BIDS, jak běží na serveru?

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



  1. Jak specifikovat řazení s PDO bez SET NAMES?

  2. Jak vytvořit dynamické SQL dotazy uvnitř CURSORu

  3. Lze PHP skript spouštět pravidelně na serveru bez požadavků klienta?

  4. Vytvořte funkci MySQL v Laravel 5.5