Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

È possibile monitorare l'esecuzione di un pacchetto SSIS, in BIDS, mentre viene eseguito sul server?

Possibile opzione:

Devi utilizzare Logging caratteristica in SSIS. Ti consente di configurare gli eventi per i quali desideri acquisire i messaggi. Di solito preferisco il registro OnWarning e OnError per tenere traccia di tutti i messaggi di avviso e di errore che si verificano nel pacchetto. Hai vari provider per salvare i dati di registrazione. Preferisco utilizzare SQL Server in modo da poter eseguire query sulle informazioni di registrazione.

Opzioni di registrazione mostrate da SSIS 2012:

Per abilitare l'accesso a un pacchetto, devi fare clic sul pacchetto Business Intelligence Development Studio (BIDS) se stai sviluppando pacchetti in SSIS 2005 - 2008 R2 o SQL Server Data Tools (SSDT) se stai sviluppando pacchetti in SSIS 2012.

Fare clic su SSIS menu e quindi fare clic su Logging...

Verrà visualizzata la finestra di dialogo Configura registri SSIS.

Sul lato sinistro, puoi controllare il pacchetto o le singole attività per registrare i dati dell'evento.

Su Fornitori e registri scheda, è possibile selezionare un provider appropriato in cui salvare le informazioni di registro. Lo screenshot seguente mostra che le informazioni sugli eventi vengono acquisite in un database di SQL Server utilizzando il gestore connessione OLEDB_PracticeDB .

Sui Dettagli scheda, puoi selezionare quali eventi desideri acquisire. Lo screenshot qui sotto mostra che sto acquisendo i seguenti eventi.

  • OnError
  • Informazioni
  • Attività non riuscita
  • Avviso

Grazie a @William Todd Salzman per aver consigliato OnTaskFailed evento

Illustrazione del pacchetto di esempio:

Supponiamo di avere un pacchetto chiamato SO_15004109.dtsx con un Attività flusso di dati e Attività script . Data Flow Task è solo un fittizio senza componenti all'interno.

L'attività script ha il codice seguente nel metodo Main per generare informazioni personalizzate, messaggi di avviso e di errore in modo da poter osservare come viene acquisito nell'origine dati di registrazione. Il codice è scritto per SSIS 2012, quindi potrebbe essere necessario modificarlo per SSIS 2005. Ho scelto VB.NET invece di C# perché hai taggato questa domanda in e SSIS 2005 supporta solo VB.NET.

Codice attività script in VB.NET per SSIS 2005 e versioni successive.

#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

Se eseguiamo il pacchetto, fallirà perché abbiamo generato un errore all'interno dell'Attività script .

Se accedi all'origine dati in cui hai registrato gli errori, noterai che SSIS crea una tabella per registrare le informazioni se hai scelto il provider di registrazione di SQL Server. La tabella seguente elenca la tabella di registrazione creata da SSIS nel database di SQL Server scelto come provider di log.

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

La query seguente è stata eseguita nel database per visualizzare gli eventi acquisiti da questo pacchetto di esempio. Noterai alcuni messaggi due volte perché gli eventi vengono registrati per ogni container e attività. La tabella è denominata dbo.sysssislog perché il pacchetto è stato creato in SSIS 2012.

select id, event, source, message from dbo.sysssislog;

Esperienza personale con la registrazione:

Ho avuto un discreto successo nel visualizzare i messaggi di errore di registrazione per capire cosa è andato storto. A mio parere, non è consigliabile eseguire il debug dei pacchetti nell'ambiente di produzione. Tuttavia, è preferibile acquisire gli eventi del registro.

Quando ho lavorato in SSIS 2005 e 2008, ho creato rapporti basati su SSRS che interrogano la tabella di registro per generare rapporti giornalieri sull'esecuzione dei lavori e inviare un allegato PDF alle persone di interesse.

Le cose sono migliorate in SSIS 2012 che lo strumento viene fornito con funzionalità di reporting integrate con Catalogo dei servizi di integrazione che crea un database denominato SSIDB .