sql >> Database >  >> RDS >> Sqlserver

Kunt u de uitvoering van een SSIS-pakket in BIDS volgen terwijl het op de server draait?

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



  1. Wat is de gemaakte datum-tijd voor tabelrij in Oracle?

  2. PostgreSQL:ST_GeomFromText(onbekend) bestaat niet

  3. Een CLOB invoegen met cx_Oracle

  4. oracle sql - vind veelvoorkomende items die tussen twee gebruikers zijn gekocht