Journalisation d'Integration Services (SSIS)

SQL Server Integration Services contient des modules fournisseur d'informations que vous pouvez utiliser pour implémenter la journalisation dans les packages, les conteneurs et les tâches. Avec la journalisation, vous pouvez capturer des informations d'exécution sur un package qui vous aideront à auditer et à résoudre les problèmes d'un package à chaque exécution. Un journal peut ainsi capturer le nom de l'opérateur ayant exécuté le package et l'heure à laquelle le package a débuté et s'est terminé.

Vous pouvez configurer l'étendue des informations enregistrées lors d'une exécution de package sur le serveur Integration Services. Pour plus d'informations, consultez Activer la journalisation des exécutions de package sur le serveur SSIS.

Vous pouvez également inclure la journalisation lorsque vous exécutez un package à l'aide de l'utilitaire d'invite de commandes dtexec. Pour plus d'informations sur les arguments d'invite de commandes prenant en charge la journalisation, consultez Utilitaire dtexec.

Configurer la journalisation dans les Outils de données SQL Server

Les journaux sont associés aux packages et configurés au niveau du package. Chaque tâche ou conteneur dans un package peut journaliser des informations dans n'importe quel journal de package. Les tâches et conteneurs d'un package peuvent être activés pour la journalisation même si le package lui-même ne l'est pas. Par exemple, vous pouvez activer la journalisation sur une tâche d'exécution SQL sans activer la journalisation sur le package parent. Un package, un conteneur ou une tâche peuvent écrire dans plusieurs journaux. Vous pouvez activer la journalisation sur le package uniquement, ou choisir d'activer la journalisation sur une tâche ou un conteneur individuel contenu dans le package.

Lorsque vous ajoutez le journal à un package, vous choisissez le module fournisseur d'informations et l'emplacement du journal. Le module fournisseur d'informations spécifie le format des données du journal, par exemple, une base de données SQL Server ou un fichier texte.

Integration Services comprend les modules fournisseurs d'informations suivants :

  • Le module fournisseur d'informations pour les fichiers texte, qui enregistre les entrées du journal dans des fichiers texte ASCII au format CSV. L'extension de nom de fichier par défaut de ce fournisseur est .log.

  • Le module fournisseur d'informations pour le SQL Server Profiler, qui enregistre des traces que vous pouvez ensuite afficher à l'aide de SQL Server Profiler. L'extension de nom de fichier par défaut de ce fournisseur est .trc.

    [!REMARQUE]

    Vous ne pouvez pas utiliser le module fournisseur d'informations SQL Server Profiler dans un package exécuté en mode 64 bits.

  • Le module fournisseur d'informations pour SQL Server, qui enregistre les entrées du journal dans la table sysssislog d'une base de données SQL Server.

  • Le module fournisseur d'informations pour les événements Windows, qui enregistre les entrées du journal des applications dans le journal des événements Windows sur l'ordinateur local.

  • Le module fournisseur d'informations pour les fichiers XML, qui enregistre les fichiers journaux dans un fichier XML. L'extension de nom de fichier par défaut de ce fournisseur est .xml.

Si vous ajoutez un module fournisseur d'informations à un package ou configurez la journalisation par programme, vous pouvez utiliser un ProgID ou un ClassID pour identifier ce module, au lieu d'utiliser les noms affichés par le concepteur SSIS dans la boîte de dialogue Configurer les journaux SSIS.

Le tableau suivant énumère les ProgID et ClassID des modules fournisseurs d'informations inclus dans Integration Services, ainsi que l'emplacement des journaux dans lesquels les modules fournisseurs d'informations écrivent.

Module fournisseur d'informations

ProgID

ClassID

Emplacement

Fichier texte

DTS.LogProviderTextFile

{0A039101-ACC1-4E06-943F-279948323883}

Le gestionnaire de connexions de fichiers utilisé par le module fournisseur d'informations spécifie le chemin d'accès du fichier texte.

SQL Server Profiler

DTS.LogProviderSQLProfiler

{E93F6300-AE0C-4916-A7BF-A8D0CE12C77A}

Le gestionnaire de connexions de fichiers utilisé par le module fournisseur d'informations spécifie le chemin d'accès du fichier utilisé par SQL Server Profiler.

SQL Server

DTS.LogProviderSQLServer

{94150B25-6AEB-4C0D-996D-D37D1C4FDEDA}

Le gestionnaire de connexions OLE DB utilisé par le module fournisseur d'informations spécifie la base de données SQL Server qui contient la table sysssislog avec les entrées de journal.

Journal des événements Windows

DTS.LogProviderEventLog

{071CC8EB-C343-4CFF-8D58-564B92FCA3CF}

Le journal des applications dans l'Observateur d'événements Windows contient les informations de journalisation de Integration Services.

Fichier XML

DTS.LogProviderXMLFile

{440945A4-2A22-4F19-B577-EAF5FDDC5F7A}

Le gestionnaire de connexions de fichiers utilisé par le module fournisseur d'informations spécifie le chemin d'accès du fichier XML.

Vous pouvez également créer des modules fournisseurs d'informations personnalisés. Pour plus d'informations, consultez Création d'un module fournisseur d'informations personnalisé.

Les modules fournisseurs d'informations d'un package sont membres de la collection des modules fournisseurs d'informations du package. Si vous créez un package et implémentez la journalisation à l'aide du concepteur SSIS, vous pouvez afficher la liste des membres de la collection dans les dossiers Module fournisseur d'informations de l'onglet Explorateur de package du concepteur SSIS.

Un module fournisseur d'informations est configuré en indiquant le nom et la description du module et en spécifiant le gestionnaire de connexions qu'il utilise. Le module fournisseur d'informations SQL Server utilise un gestionnaire de connexions OLE DB. Le fichier texte, SQL Server Profiler et les modules fournisseurs d'informations pour les fichiers XML utilisent tous des gestionnaires de connexions de fichiers. Le module fournisseur d'informations pour les événements Windows n'utilise pas de gestionnaire de connexions, car il écrit directement dans le journal des événements Windows. Pour plus d'informations, consultez Gestionnaire de connexions OLE DB et Gestionnaire de connexions de fichiers.

Personnalisation de la journalisation

Pour personnaliser la journalisation d'un événement ou d'un message personnalisé, Integration Services fournit un schéma d'informations fréquemment journalisées à inclure dans les entrées de journal. Le schéma de journal Integration Services définit les informations que vous pouvez journaliser. Vous pouvez sélectionner les éléments à partir du schéma de journal pour chaque entrée de journal.

Un package et ses conteneurs et tâches ne doivent pas journaliser la même information, et les tâches au sein du même package ou conteneur peuvent journaliser des informations différentes. Par exemple, un package peut journaliser des informations d'opérateur lorsque le package démarre, une tâche peut journaliser la source de l'échec de la tâche et une autre tâche peut journaliser les informations lorsque des erreurs surviennent. Si un package et ses conteneurs et tâches utilisent plusieurs journaux, les mêmes informations sont écrites dans tous les journaux.

Vous pouvez sélectionner un niveau de journalisation adapté à vos besoins en spécifiant les événements à journaliser et les informations à journaliser pour chaque événement. Vous pouvez estimer que certains événements fournissent des informations plus utiles que d'autres. Par exemple, vous pouvez ne journaliser que les noms d'ordinateur et d'opérateur pour l'événement PreExecute tout en journalisant toutes les informations disponibles pour l'événement Error.

Pour empêcher les fichiers journaux d'occuper de grands volumes sur l'espace disque ou pour éviter une journalisation excessive qui pourrait nuire aux performances, vous pouvez limiter la journalisation en sélectionnant des informations et événements spécifiques à journaliser. Par exemple, vous pouvez configurer un journal pour qu'il ne capture que la date et le nom de l'ordinateur pour chaque erreur.

Dans le concepteur SSIS, vous pouvez définir les options de journalisation en utilisant la boîte de dialogue Configurer les journaux SSIS.

Schéma de journal

Le tableau suivant décrit les éléments du schéma de journal.

Élément

Description

Ordinateur

Le nom de l'ordinateur sur lequel l'événement du journal est survenu.

Opérateur

L'identité de l'utilisateur ayant lancé le package.

SourceName

Le nom du conteneur ou de la tâche dans laquelle l'événement du journal est survenu.

SourceID

L'identificateur unique du package ; la boucle Foreach, la boucle For ou le conteneur de séquences ; ou la tâche dans laquelle l'événement du journal est survenu.

ExecutionID

L'identificateur global unique (GUID) de l'instance d'exécution du package.

[!REMARQUE]

L'exécution d'un package unique peut créer des entrées de journal avec des valeurs différentes pour l'élément ExecutionID. Par exemple, lorsque vous exécutez un package dans Outils de données SQL Server, la phase de validation peut créer des entrées de journal avec un élément ExecutionID correspondant à Outils de données SQL Server. Toutefois, la phase d'exécution peut créer des entrées de journal avec un élément ExecutionID correspondant à dtshost.exe. Autre exemple : lorsque vous exécutez un package qui contient des tâches d'exécution de package, chacune de ces tâches exécute un package enfant. Ces packages enfants peuvent créer des entrées de journal comportant un élément ExecutionID différent de celui des entrées de journal créées par le package parent.

MessageText

Un message associé à l'entrée de journal.

DataBytes

Un tableau d'octets spécifique à l'entrée du journal. La signification de ce champ varie en fonction de l'entrée du journal.

Le tableau suivant décrit trois éléments supplémentaires du schéma de journal qui ne sont pas disponibles sous l'onglet Détails de la boîte de dialogue Configurer les journaux SSIS.

Élément

Description

StartTime

Heure à laquelle le conteneur ou la tâche commence à s'exécuter.

EndTime

Heure à laquelle le conteneur ou la tâche arrête de s'exécuter.

DataCode

Valeur entière facultative qui contient généralement une valeur de l'énumération DTSExecResult qui indique le résultat de l'exécution du conteneur ou de la tâche :

  • 0 - Succès

  • 1 - Échec

  • 2 - Terminée

  • 3 - Annulée

Entrées du journal

Integration Services prend en charge les entrées de journal sur des événements prédéfinis et fournit des entrées de journal personnalisées pour de nombreux objets Integration Services. La boîte de dialogue Configurer les journaux SSIS du concepteur SSIS répertorie ces événements et ces entrées de journal personnalisées.

Le tableau suivant décrit les événements prédéfinis qui peuvent être activés pour écrire des entrées de journal lorsque des événements générés à l'exécution surviennent. Ces entrées de journal s'appliquent aux exécutables, au package et aux conteneurs et tâches inclus dans le package. Le nom de l'entrée de journal est le même que l'événement généré à l'exécution et qui a provoqué l'écriture de l'entrée de journal.

Événements

Description

OnError

Écrit une entrée de journal lorsqu'une erreur se produit.

OnExecStatusChanged

Écrit une entrée de journal lorsqu'une tâche (et non un conteneur) est interrompue ou reprise pendant le débogage.

OnInformation

Écrit une entrée de journal pendant la validation et l'exécution d'un exécutable pour rapporter des informations.

OnPostExecute

Écrit une entrée de journal immédiatement après la fin de l'exécution de l'exécutable.

OnPostValidate

Écrit une entrée de journal lorsque la validation de l'exécutable est terminée.

OnPreExecute

Écrit une entrée de journal immédiatement avant le début de l'exécution de l'exécutable.

OnPreValidate

Écrit une entrée de journal lorsque la validation de l'exécutable débute.

OnProgress

Écrit une entrée de journal lorsqu'une progression quantifiable a été réalisée par l'exécutable.

OnQueryCancel

Écrit une entrée de journal pour chaque point de jonction dans le traitement de la tâche où il est possible d'annuler l'exécution.

OnTaskFailed

Écrit une entrée de journal lorsqu'une tâche échoue.

OnVariableValueChanged

Écrit une entrée de journal lorsque la valeur d'une variable est modifiée.

OnWarning

Écrit une entrée de journal lorsqu'un avertissement survient.

PipelineComponentTime

Pour chaque composant de flux de données, écrit une entrée de journal pour chaque phase de validation et d'exécution. L'entrée de journal spécifie le temps de traitement de chaque phase.

Diagnostic

Écrit une entrée de journal qui fournit des informations de diagnostic.

Par exemple, vous pouvez enregistrer un message avant et après chaque appel à un fournisseur de données externes. Pour plus d'informations, consultez Outils de dépannage pour l'exécution des packages.

Le package ainsi que de nombreuses tâches contiennent des entrées du journal personnalisées qui peuvent être activées pour la journalisation. Par exemple, la tâche d'envoi de courrier fournit l'entrée de journal personnalisée SendMailTaskBegin, qui journalise les informations lorsque l'exécution de la tâche démarre, mais avant d'envoyer un message électronique. Pour plus d'informations, consultez Messages personnalisés pour la journalisation.

Différentiation entre des copies de packages

Les données de journalisation incluent le nom et le GUID du package auxquels les entrées de journal appartiennent. Si vous créez un package par copie d'un package existant, le nom et le GUID du package existant sont également copiés. Il est donc possible que deux packages aient le même nom et le même GUID, ce qui les rend difficiles à distinguer dans les données du journal.

Pour lever l'ambiguïté, vous devez mettre à jour le nom et le GUID des nouveaux packages. Dans Outils de données SQL Server (SSDT), vous pouvez régénérer le GUID dans la propriété ID et mettre à jour la valeur de la propriété Name dans la fenêtre Propriétés. Vous pouvez également modifier le GUID et le nom par programme ou en utilisant l'invite de commandes dtutil . Pour plus d'informations, consultez Définir les propriétés d'un package et Utilitaire dtutil.

Options de journalisation des parents

Souvent, les options de journalisation des tâches et conteneurs de séquences et de boucles For ou Foreach correspondent à celle du package ou du conteneur parent. Dans ce cas, vous pouvez configurer ces éléments pour qu'ils héritent des options de journalisation de leur conteneur parent. Par exemple, dans un conteneur de boucles For qui contient une tâche d'exécution SQL, cette tâche peut utiliser les options de journalisation définies pour le conteneur de boucles For. Pour utiliser les options de journalisation des parents, définissez la propriété LoggingMode du conteneur avec la valeur UseParentSetting. Vous pouvez définir cette propriété dans la fenêtre Propriétés de Outils de données SQL Server (SSDT) ou via la boîte de dialogue Configurer les journaux SSIS dans le concepteur SSIS.

Modèles de journalisation

Dans la boîte de dialogue Configurer les journaux SSIS, vous pouvez également créer et enregistrer comme modèles les configurations de journalisation fréquemment utilisées, puis utiliser ces modèles dans différents packages. Cette procédure facilite l'application d'une stratégie de journalisation cohérente à différents packages et la modification des paramètres de journaux par la mise à jour et l'application des modèles. Les modèles sont stockés sous forme de fichiers XML.

Pour configurer la journalisation à l'aide de la boîte de dialogue Configurer les journaux SSIS

  1. Activez le package et ses tâches pour la journalisation. La journalisation peut s'effectuer au niveau du package, du conteneur et de la tâche. Vous pouvez spécifier différents journaux pour les packages, conteneurs et tâches.

  2. Sélectionnez un module fournisseur d'informations et ajoutez un journal pour le package. Les journaux ne peuvent être créés qu'au niveau du package, et une tâche ou un conteneur doit utiliser un des journaux créés pour le package. Chaque journal est associé à l'un des modules fournisseurs d'informations suivants : fichier texte, SQL Server Profiler, SQL Server, journal des événements Windows ou fichier XML. Pour plus d'informations, consultez Activer la journalisation des packages dans les outils de données SQL Server.

  3. Sélectionnez les événements et les informations de schéma de journal pour chaque événement que vous voulez capturer dans le journal. Pour plus d'informations, consultez Configurer la journalisation à l'aide d'un fichier de configuration enregistré.

Configuration du module fournisseur d'informations

Vous pouvez définir les propriétés par le biais du concepteur SSIS ou par programme.

Un module fournisseur d'informations est créé et configuré dans le cadre de l'implémentation d'un package. Pour plus d'informations, consultez Journalisation d'Integration Services (SSIS).

Après avoir créé un module fournisseur d'informations, vous pouvez l'afficher et modifier ses propriétés dans la fenêtre Propriétés de Outils de données SQL Server (SSDT).

Pour plus d'informations sur la définition par programme de ces propriétés, consultez la documentation relative à la classe LogProvider.

Journalisation des tâches de flux de données

La tâche de flux de données fournit un grand nombre d'entrées de journal personnalisées à l'aide desquelles vous pouvez analyser et améliorer les performances. Vous pouvez, par exemple, analyser les composants susceptibles de provoquer des fuites de mémoire ou contrôler le temps nécessaire à l'exécution d'une tâche en particulier. Pour obtenir une liste de ces entrées de journal personnalisées et un exemple de sortie de journalisation, consultez Tâche de flux de données.

Utiliser l'événement PipelineComponentTime

L'entrée de journal personnalisée la plus utile est peut-être l'événement PipelineComponentTime. Cette entrée de journal signale le nombre de millisecondes que chaque composant dans le flux de données passe sur chacune des cinq étapes de traitement majeures. Le tableau suivant décrit ces étapes de traitement. Les développeurs Integration Services reconnaîtront ces étapes comme étant les méthodes principales d'un PipelineComponent.

Étape

Description

Validate

Le composant recherche des valeurs de propriété et des paramètres de configuration valides.

PreExecute

Le composant effectue un traitement unique avant de commencer à traiter les lignes de données.

PostExecute

Le composant effectue un traitement unique après avoir traité toutes les lignes de données.

ProcessInput

Le composant de transformation ou de destination traite les lignes de données entrantes qu'une source ou une transformation en amont lui a passées.

PrimeOutput

Le composant source ou de transformation remplit les tampons de données à passer à un composant de transformation ou de destination en aval.

Lorsque vous activez l'événement PipelineComponentTime, Integration Services consigne un message pour chaque étape de traitement effectuée par chaque composant. Les entrées de journal suivantes illustrent un sous-ensemble des messages consignés par l'exemple de package Integration Services CalculatedColumns :

The component "Calculate LineItemTotalCost" (3522) spent 356 milliseconds in ProcessInput.

The component "Sum Quantity and LineItemTotalCost" (3619) spent 79 milliseconds in ProcessInput.

The component "Calculate Average Cost" (3662) spent 16 milliseconds in ProcessInput.

The component "Sort by ProductID" (3717) spent 125 milliseconds in ProcessInput.

The component "Load Data" (3773) spent 0 milliseconds in ProcessInput.

The component "Extract Data" (3869) spent 688 milliseconds in PrimeOutput filling buffers on output "OLE DB Source Output" (3879).

The component "Sum Quantity and LineItemTotalCost" (3619) spent 141 milliseconds in PrimeOutput filling buffers on output "Aggregate Output 1" (3621).

The component "Sort by ProductID" (3717) spent 16 milliseconds in PrimeOutput filling buffers on output "Sort Output" (3719).

Ces entrées de journal montrent que la tâche de flux de données a passé la plupart du temps dans les étapes suivantes, répertoriées ici dans l'ordre décroissant :

  • La source OLE DB nommée « Extract Data » a passé 688 ms à charger des données.

  • La transformation de la colonne dérivée nommée « Calculate LineItemTotalCost » a passé 356 ms à exécuter des calculs sur les lignes entrantes.

  • La transformation d'agrégation nommée "Sum Quantity and LineItemTotalCost" a passé un total de 220 ms (141 ms dans PrimeOutput et 79 ms dans ProcessInput) à effectuer des calculs et à passer les données à la transformation suivante.

Tâches associées

La liste suivante contient des liens vers les rubriques qui indiquent comment effectuer les tâches relatives à la fonctionnalité de journalisation.

Contenu connexe

Icône Integration Services (petite) Rester à jour avec Integration Services

Pour obtenir les derniers téléchargements, articles, exemples et vidéos de Microsoft, ainsi que des solutions sélectionnées par la communauté, visitez la page Integration Services sur MSDN :


Pour recevoir une notification automatique de ces mises à jour, abonnez-vous aux flux RSS disponibles sur la page.

Outil DTLoggedExec pour un enregistrement complet et détaillé (projet CodePlex)

Voir aussi

Tâches

Afficher les entrées de journal dans la fenêtre Journaux d'événements