Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pouvez-vous surveiller l'exécution d'un package SSIS, dans BIDS, lorsqu'il s'exécute sur le serveur ?

Choix possible :

Vous devez utiliser Logging fonctionnalité dans SSIS. Il vous permet de configurer les événements pour lesquels vous souhaitez capturer les messages. Je préfère généralement le journal OnWarning et OnError pour garder une trace de tous les messages d'avertissement et d'erreur qui se produisent dans le package. Vous disposez de différents fournisseurs pour enregistrer les données de journalisation. Je préfère utiliser SQL Server pour pouvoir interroger les informations de journalisation.

Options de journalisation affichées à partir de SSIS 2012 :

Pour activer la connexion à un package, vous devez cliquer sur le package Business Intelligence Development Studio (BIDS) si vous développez des packages dans SSIS 2005 - 2008 R2 ou SQL Server Data Tools (SSDT) si vous développez des packages dans SSIS 2012.

Cliquez sur SSIS puis cliquez sur Logging...

Vous verrez la boîte de dialogue Configurer les journaux SSIS.

Sur le côté gauche, vous pouvez vérifier le package ou les tâches individuelles pour enregistrer les données d'événement.

Sur les fournisseurs et journaux , vous pouvez sélectionner un fournisseur approprié sur lequel vous pouvez enregistrer les informations du journal. La capture d'écran ci-dessous montre que les informations sur les événements sont capturées dans une base de données SQL Server à l'aide du gestionnaire de connexions OLEDB_PracticeDB .

Sur les Détails , vous pouvez sélectionner les événements que vous souhaitez capturer. La capture d'écran ci-dessous montre que je capture les événements suivants.

  • OnError
  • OnInformation
  • OnTaskFailed
  • OnWarning

Merci à @William Todd Salzman pour avoir recommandé OnTaskFailed événement

Exemple d'illustration de paquet :

Disons que nous avons un package nommé SO_15004109.dtsx avec une tâche de flux de données et Tâche de script . La tâche de flux de données n'est qu'un mannequin sans composants à l'intérieur.

La tâche de script contient le code suivant dans la méthode Main pour déclencher des informations personnalisées, des messages d'avertissement et d'erreur afin que nous puissions observer comment il est capturé dans la source de données de journalisation. Le code est écrit pour SSIS 2012, vous devrez donc peut-être le modifier pour SSIS 2005. J'ai choisi VB.NET au lieu de C# parce que vous avez marqué cette question sous et SSIS 2005 ne prend en charge que VB.NET.

Code de tâche de script dans VB.NET pour SSIS 2005 et supérieur.

#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

Si nous exécutons le package, il échouera car nous avons généré une erreur dans la tâche de script .

Si vous accédez à la source de données dans laquelle vous avez consigné les erreurs, vous remarquerez que SSIS crée une table pour consigner les informations si vous avez choisi le fournisseur de journalisation SQL Server. Le tableau ci-dessous répertorie la table de journalisation créée par SSIS dans la base de données SQL Server choisie comme fournisseur de journal.

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 requête ci-dessous a été exécutée dans la base de données pour afficher les événements capturés par cet exemple de package. Vous remarquerez certains messages deux fois car les événements sont enregistrés pour chaque conteneur et tâche. La table est nommée dbo.sysssislog car le package a été créé dans SSIS 2012.

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

Expérience personnelle avec la journalisation :

J'ai eu assez de succès en visualisant simplement les messages d'erreur de journalisation pour comprendre ce qui n'allait pas. Le débogage des packages dans un environnement de production n'est pas conseillé, à mon avis. Cependant, il est préférable de capturer les événements du journal.

Lorsque j'ai travaillé dans SSIS 2005 et 2008, j'ai créé des rapports basés sur SSRS qui interrogent la table de journal pour générer un rapport quotidien des exécutions de tâches et envoyer une pièce jointe PDF aux personnes d'intérêt.

Les choses se sont améliorées dans SSIS 2012, l'outil étant doté de capacités de création de rapports intégrées avec Catalogue des services d'intégration qui crée une base de données nommée SSIDB .