L’exécution d’un package SSIS cesse de répondre lorsque vous activez des transactions DTC pour un package dans Microsoft SQL Server

Cet article vous aide à résoudre le problème dans lequel l’exécution d’un package Microsoft SQL Server Integration Services (SSIS) cesse de répondre si vous activez les transactions DTC pour le package et activez la ValidateExternalMetadata propriété pour un composant dans une tâche de flux de données.

Version du produit d’origine : SQL Server
Numéro de la base de connaissances d’origine : 2253391

Symptômes

Prenons l’exemple du scénario suivant :

  • Vous créez un package SSIS dans SQL Server.
  • Le package SSIS contient une tâche de flux de données et d’autres tâches.
  • La TransactionOption propriété du package SSIS est définie sur Obligatoire pour utiliser des transactions DTC.
  • Les autres tâches s’exécutent dans une transaction DTC avant l’exécution de la tâche de flux de données.
  • Vous ajoutez un composant à la tâche de flux de données.
  • La ValidateExternalMetadata propriété d’un composant de flux de données est définie sur True.
  • La tâche de flux de données contient un composant Ole DB Destination dont le mode d’accès aux données est défini sur Table ou vue, ou sur Nom de table ou variable de nom de vue.

Lorsque vous exécutez le package dans ce scénario, l’exécution cesse de répondre. En outre, si vous déboguez le package SSIS dans Visual Studio, vous recevez des messages qui ressemblent à ce qui suit dans l’affichage Progression :

Démarrage du package SSIS « Package.dtsx ».

Informations : 0x4004300A à Data Flow Task, DTS. Pipeline : la phase de validation commence. Informations : 0x4001100A dans Package : Démarrage de la transaction distribuée pour ce conteneur. Informations : 0x4004300A à Data Flow Task, DTS. Pipeline : la phase de validation commence.

Cause

Ce problème se produit parce que la connexion dans le flux de données n’est pas inscrite dans la transaction DTC. Cela entraîne le blocage de l’exécution de la sp_cursoropen procédure stockée. Il s’agit d’une fonctionnalité de conception, car une connexion ne peut pas être inscrite dans une transaction DTC pendant le processus de validation. Dans le scénario décrit dans la section Symptômes , le processus de validation d’un composant de flux de données est bloqué lorsque vous exécutez le package, car la connexion dans la tâche de flux de données n’a pas été inscrite dans la transaction DTC.

Résolution

Pour résoudre ce problème, appliquez l’une des méthodes suivantes :

  • Définissez ValidateExternalMetadata pour tous les composants de la tâche de flux de données sur False.

  • Définissez le mode d’accès aux données du composant Ole DB Destination sur l’un des modes suivants :

    • Table ou vue - chargement rapide
    • Nom de table ou variable de nom de vue - chargement rapide
    • Commande SQL

Plus d’informations

Le mode d’accès aux données Table ou Affichage est bloqué, mais les autres modes d’accès aux données ne sont pas bloqués, car les différentes commandes émises par le fournisseur de données pour chaque mode d’accès aux données. Pour obtenir plus d’informations sur ce problème, utilisez SQL Server Profiler pour afficher les différentes commandes émises par le fournisseur de données.