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 sql-server-2005
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
.