CORRECTIF : Vous recevez des messages d’erreur ou les données sont endommagées lorsque vous exécutez un package SSIS qui contient une tâche de flux de données dans une situation d’insuffisance de mémoire dans SQL Server 2005 ou SQL Server 2008


Microsoft distribue les correctifs de Microsoft SQL Server 2008 en tant que fichier téléchargeable. Les correctifs étant cumulatifs, chaque nouvelle version contient tous les correctifs et correctifs de sécurité inclus dans la précédente 2008 de SQL Server version du correctif.

Symptômes


Considérez le scénario suivant :
  • Vous exécutez un package SQL Server Integration Services (SSIS) dans SQL Server 2005 ou SQL Server 2008.
  • Le package SSIS contient une tâche de flux de données.
  • Vous exécutez le package SSIS sur un ordinateur qui dispose d’une mémoire disponible insuffisante. La condition d’insuffisance de mémoire peut se produire par intermittence ou temporairement.
  • Lorsque vous exécutez le package SSIS, les tampons de données sont écrites sur le disque en raison de la condition de mémoire insuffisante.
Dans ce scénario, vous pouvez rencontrer un ou plusieurs des problèmes suivants :

Symptôme 1

Données sont endommagées avant que les données n’atteint la destination de flux de données. Vous trouvez que les données dans la destination de flux de données devient les valeurs suivantes de manière inattendue.
  • « » : NULL, vide ou les valeurs de chaîne vides
  • 0 : valeur nulle ou une valeur nulle qui a le plus de précision et d’échelle.
  • 0-0-0 0:0:0 : pointillés zéro valeur date
Remarque Vous ne recevrez pas un message d’erreur lorsque vous rencontrez ce problème.

Symptôme 2

Vous recevez un des messages d’erreur de la conversion du type données suivants :

Message d'erreur 1

DTS_E_OLEDBERROR. Une erreur OLE DB s’est produite. Code d’erreur : 0 x 80004005.

Un enregistrement OLE DB est disponible. Source : « Microsoft SQL Native Client » Hresult : 0 x 80004005 Description : « valeur de caractère non valide pour la spécification de cast ».

Message d'erreur 2

DTS_E_COLUMNSTATUSERROR. Il y a une erreur avec une colonne d’entrée «ColumnName» (NuméroIdentification) sur l’entrée « OLE DB Destination d’entrée » (NuméroIdentification). L’état de la colonne renvoyée était : « Échec de la Conversion car la valeur des données a dépassé le type spécifié. ».

Symptôme 3

Vous recevez le message d’erreur violation contrainte suivantes :

DTS_E_OLEDBERROR. Une erreur OLE DB s’est produite. Code d’erreur : 0 x 80004005.

Un enregistrement OLE DB est disponible. Source : « Microsoft SQL Native Client » Hresult : 0 x 80004005 Description : « l’instruction a été arrêtée. ».

Un enregistrement OLE DB est disponible. Source : « Microsoft SQL Native Client » Hresult : 0 x 80004005 Description : « Violation de contrainte de clé primaire 'PrimaryKeyName'. Impossible d’insérer une clé en double dans l’objet 'nom_table'. ».

En outre, si vous réexécutez le package SSIS même lorsque la mémoire est disponible, ce problème ne se produit pas.

Cause


Lorsque une ressource de mémoire faible est envoyé pour le moteur de flux de données, le moteur de flux de données écrit des tampons de données pour disque temporairement. Ce problème se produit parce que les valeurs de données sont définies avec la valeur NULL ou zéro de manière incorrecte lorsque le moteur de flux de données écrit des tampons de données sur le disque. Par conséquent, lorsque le moteur de flux de données lit des données dans des tampons de données et écrit ensuite les données vers la destination de flux de données, la destination de flux de données contient les valeurs de données endommagé. Les valeurs de données endommagé peuvent également entraîner d’erreurs de conversion de type de données ou des erreurs de violation de contrainte.

Résolution


Informations de mise à jour cumulative

La version de SQL Server 2008

Le correctif de ce problème a été publié dans 6 de mise à jour Cumulative. Pour plus d’informations sur l’obtention de ce package de mise à jour cumulative pour SQL Server 2008, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
971490 Cumulative mise à jour 6 pour SQL Server 2008
Remarque Les versions étant cumulatives, chaque nouvelle version du correctif contient tous les correctifs et correctifs de sécurité inclus dans la précédente version du correctif de SQL Server 2008. Nous vous recommandons l’application la plus récente version du correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
956909 the SQL Server versions 2008 publiées après SQL Server 2008

SQL Server 2008 Service Pack 1 (SP1)

Important Vous devez installer ce correctif si vous exécutez SQL Server 2008 Service Pack 1 (SP1).

Le correctif de ce problème a été également publié dans Cumulative Update 3 pour SQL Server 2008 Service Pack 1. Pour plus d’informations sur ce package de mise à jour cumulative, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
971491 Cumulative mise à jour 3 pour Microsoft SQL Server 2008 Service Pack 1
Remarque Les versions étant cumulatives, chaque nouvelle version du correctif contient tous les correctifs et correctifs de sécurité inclus dans la précédente version du correctif de SQL Server 2008. Microsoft vous recommande l’application la plus récente version du correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
970365 the SQL Server versions 2008 publiées après SQL Server 2008 Service Pack 1
Les correctifs Microsoft SQL Server 2008 sont créés pour les packs de service spécifiques de SQL Server. Vous devez appliquer un correctif SQL Server 2008 Service Pack 1 dans une installation de SQL Server 2008 Service Pack 1. Par défaut, tout correctif qui est fourni dans un service pack de SQL Server est inclus dans le prochain service pack de SQL Server.

SQL Server 2005 Service Pack 2 (SP2)

Important Vous devez installer ce correctif si vous exécutez SQL Server 2005 Service Pack 2.


Le correctif de ce problème a été publié dans 15 de mise à jour Cumulative pour SQL Server 2005 Service Pack 2. Pour plus d’informations sur ce package de mise à jour cumulative, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
972510 Cumulative update package 15 pour SQL Server 2005 Service Pack 2
Remarque Les versions étant cumulatives, chaque nouvelle version de correctif contient tous les correctifs et correctifs de sécurité inclus dans la précédente de SQL Server 2005 version du correctif. Microsoft vous recommande l’application la plus récente version du correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
937137 le SQL Server 2005 versions publiées après la publication de SQL Server 2005 Service Pack 2
Les correctifs Microsoft SQL Server 2005 sont créés pour les packs de service spécifiques de SQL Server. Vous devez appliquer un correctif SQL Server 2005 Service Pack 2 à une installation de SQL Server 2005 Service Pack 2. Par défaut, tout correctif qui est fourni dans un service pack de SQL Server est inclus dans le prochain service pack de SQL Server.

SQL Server 2005 Service Pack 3 (SP3)

Important Vous devez utiliser ce correctif si vous exécutez SQL Server 2005 Service Pack 3.


Le correctif de ce problème a été également publié dans les 5 mise à jour Cumulative pour SQL Server 2005 Service Pack 3. Pour plus d’informations sur ce package de mise à jour cumulative, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
972511 Cumulative mise à jour 5 pour SQL Server 2005 Service Pack 3
Remarque Les versions étant cumulatives, chaque nouvelle version de correctif contient tous les correctifs et correctifs de sécurité inclus dans la précédente de SQL Server 2005 version du correctif. Microsoft vous recommande l’application la plus récente version du correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
960598 le SQL Server 2005 versions publiées après la publication de SQL Server 2005 Service Pack 3
Les correctifs Microsoft SQL Server 2005 sont créés pour les packs de service spécifiques de SQL Server. Vous devez appliquer un correctif SQL Server 2005 Service Pack 3 pour une installation de SQL Server 2005 Service Pack 3. Par défaut, tout correctif qui est fourni dans un service pack de SQL Server est inclus dans le prochain service pack de SQL Server.

Solution de contournement


Pour contourner ce problème, résoudre le problème de mémoire insuffisante. La quantité minimale de mémoire pouvant déclencher ce problème varie d’un ordinateur à l’autre. En règle générale, ce montant est entre 32 mégaoctets (Mo) et 64 Mo de mémoire disponible. Par conséquent, nous vous recommandons de configurer le serveur pour allouer plus de 64 Mo de mémoire disponible à SSIS.

Le montant par défaut de la mémoire disponible, qui signale qu'un événement de notification de peu de ressources de mémoire est d’environ 32 Mo par 4 gigaoctets (Go) pour un maximum de 64 Mo par 4 Go. Pour plus d’informations, visitez le site Web de Microsoft Developer Network (MSDN) à l’adresse suivante :



Toutefois, il est difficile d’éviter totalement ce problème car la mémoire disponible peut fluctuer fortement sur les serveurs de production en activité. En outre, mémoire peut diminuer pour diverses raisons au sein des activités courantes. Pour réduire la fréquence de ce problème, utilisez une des méthodes suivantes :

Méthode 1

Ajouter plus de mémoire physique à l’ordinateur.


Méthode 2

Exécutez le package SSIS sur un ordinateur autre que l’ordinateur qui exécute l’instance de SQL Server.

Méthode 3

Si vous exécutez le package SSIS sur le même ordinateur qui exécute l’instance de SQL Server, définissez l’option de configuration mémoire maximale du serveur pour l’instance à une valeur inférieure pour augmenter la mémoire disponible sur l’ordinateur.

Méthode 4

Quitter les applications stressantes qui consomment une grande quantité de mémoire lorsque vous exécutez des Packages SSIS qui contiennent des tâches de flux de données.

Méthode 5

Exécuter des packages SSIS et les tâches de flux de données en série au lieu d’en parallèle afin de réduire la consommation cumulée de l’utilisation de la mémoire.


Méthode 6

Utilisez la méthode qui est décrite dans la sous-section « Comment faire contrôler la consommation de mémoire pour SSIS » dans la section « Informations supplémentaires » pour résoudre les problèmes liés à la condition de mémoire faible et optimiser l’utilisation de la mémoire pour SSIS.

État


Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations


Plus de détails sur les symptômes

Symptôme 1

Si vous trouvez endommagé des valeurs de données dans la destination de flux de données, les valeurs des données endommagées peuvent apparaître comme des représentations différentes en fonction du type de données. Par exemple, les types de données suivants apparaissent comme des représentations différentes des valeurs de données endommagée :
DT_STR = ""Valeurs de chaîne vide, NULL ou vide
DT_I4 = 0Valeur nulle du type de données integer
DT_UI1 = 0Valeur nulle du type de données entier non signé
DT_NUMERIC = 00000000000000000000000000000000000000Valeur de zéro qui a le plus de précision et d’échelle.
DT_DBTIMESTAMP = 0-0-0 0:0:0Discontinue aucune valeur de date
Dans la plupart des scénarios, toutes les colonnes et toutes les lignes ont les valeurs de données endommagées, ou une partie importante des colonnes et des lignes avoir endommagé des valeurs de données. En outre, le nombre total de lignes en général d’atteindre la destination correspond au nombre de lignes attendus au lieu de destination même lorsque les données sont endommagées. Cela est dû à un problème de mémoire tampon. Une mémoire tampon entière ou un ensemble de tampons dans la tâche de flux de données en cours d’exécution peut-être être affecté. Selon la taille de la mémoire tampon et la taille des données par ligne, chaque tampon peut contenir des centaines de lignes.

Dans certains modèles avancés, pas toutes les colonnes dans la tâche de flux de données sont affectés. Si les données sont manipulées dans la tâche de flux de données à l’aide de transformations telles que la transformation de recherche, expressions et transformation de colonnes dérivées, certaines colonnes de données peuvent rester le même que leurs valeurs attendues. C’est parce que SSIS remplace les données endommagées au cours de la tâche de flux de données avec les valeurs transformées.

Dans les autres conceptions avancées, certaines lignes peuvent être perdues. En raison de la nature flexible de direction de données dans les modèles de flux de données SSIS, les données corrompues peuvent être acheminées vers une destination inattendue si les valeurs des données inattendues sont perçus dans la colonne conditionnelle par la conception. Lorsque vous utilisez des transformations, telles que la transformation de fractionnement conditionnel ou des transformations de recherche, certaines lignes peuvent être perdues lors de la transformation redirige les valeurs de données endommagé. Par exemple, dans les transformations de recherche, si les lignes endommagées ne correspondent pas aux données de référence, les lignes seront éliminées.

Symptôme 2

Étant donné que les valeurs nulles ne sont pas des valeurs valides dans certains types de données, les erreurs de conversion de type de données peuvent se produire lorsque le fournisseur OLE DB convertit les types de données. Parfois, un dépassement de capacité de type de données peut également se produire. Par exemple, une colonne du type de données datetime a un « 0-0-0 0:0:0 » valeur. Cette valeur non valide provoque ce type d’erreur, car le fournisseur OLE DB ne peut pas formater les zéros non significatifs dans une valeur de date valide pour le SQL Native Client fournisseur OLE DB.

Symptôme 3

Les violations de contrainte peuvent se produire parce que les valeurs de clé primaire en double sont insérées dans la destination de flux de données. Par exemple, plusieurs valeurs zéro sont insérées dans une colonne de type de données integer , ou les valeurs NULL multiples sont insérées dans une colonne de type de données varchar . De même, une relation de clé étrangère peut être enfreinte lorsque les valeurs de clé dupliquées sont insérées dans la table cible.

Comment faire pour déterminer si vous rencontrez ce problème

Les indicateurs suivants peuvent être utilisés pour déterminer si vous rencontrez ce problème :
  • Vous pouvez surveiller le compteur de mémoires tampon spoulées pour l’objet de performance SQL Server : SSIS Pipelinedéterminer si le moteur de flux de données écrit des tampons de données sur le disque en raison d’une notification de ressources de mémoire faible.
  • Vous pouvez également examiner le fichier DTS.tmp situé dans le répertoire temporaire qui est spécifié dans la propriété BufferTempStoragePath de la tâche de flux de données. Si vous remarquez que l’augmentation de la taille du fichier DTS.tmp, le moteur de flux de données écrit des tampons de données sur le disque.
  • Si vous souhaitez déterminer si un package SSIS existant a ce problème, vous pouvez ajouter une transformation de multidiffusion à la tâche de flux de données dans le package SSIS pour diriger une copie des données vers une destination de fichier plat pour une observation plus facile.
  • Un autre indicateur de mémoire disponible est gravement insuffisante est que le message suivant est enregistré dans le journal de package SSIS :

    DTS_I_CANTRELIEVEPRESSURE le Gestionnaire de tampons a détecté que le système était faible de mémoire virtuelle, mais n’a pas pu permuter les tampons. 8 tampons ont été analysés et 8 ont été verrouillés. Soit pas assez de mémoire est disponible pour le pipeline car insuffisant est installé, autres processus l’utilisent ou trop grand nombre de tampons est verrouillé.

Comment faire pour surveiller la consommation de mémoire pour SSIS


Analyser la mémoire pour mesurer le niveau d’utilisation maximal pour différents processus d’exécution de SQL Server Integration Services calculer l’utilisation maximale de la mémoire

Surveiller l’utilisation de la mémoire maximale des opérations SQL Server Integration Services Runtime, tels que les processus de DTExec.exe et DTSHost.exe en utilisant le compteur Octets privés de l’objet processus dans l’Analyseur de performances.

Lorsque les packages SQL Server Integration Services sont en cours d’exécution, vous pouvez trouver la valeur maximale pour le compteur Octets privés de l’objet processus dans l’Analyseur de performances. Considérez le scénario où plusieurs packages s’exécuter en parallèle. Dans ce scénario, ajoutez les valeurs maximales de tous les processus en cours d’exécutant afin d’obtenir l’utilisation maximale de la mémoire.

Surveiller les processus externes pour trouver les pics et les creux

Surveiller l’utilisation de la mémoire maximale de processus autres que le service SQL Server et le service SSIS à l’aide du compteur Octets privés de l’objet processus dans l’Analyseur de performances. Recherchez les heures de pleine activité qui risquent de manque de mémoire pour SQL Server Integration Services. Par exemple, considérez les heures de pointe où plusieurs utilisateurs utilisent le protocole RDP (Remote Desktop) pour se connecter au serveur et pensez aux fois lorsque le logiciel de sauvegarde est en cours d’exécution.

Surveiller l’utilisation de la mémoire de SQL Server pour trouver les pics et les creux

Si le message « Using verrouillé des pages pour le pool de mémoire tampon. » ne sont pas présents dans le fichier Errorlog récent, le compteur Octets privés pour le processus Sqlservr.exe peut indiquer la quantité de mémoire consommée par les services de SQL Server.

Si le message n’est présent dans le fichier Errorlog récent, utilisez le compteur Mémoire totale du serveur (Ko) de la de SQL Server : Gestionnaire de mémoire objet de performance pour mesurer l’utilisation de la mémoire du pool de mémoire tampon de SQL Server. En outre, utilisez le compteur Octets privés pour le processus Sqlservr.exe pour trouver les allocations de mémoire en dehors du pool de mémoire tampon (MemToLeave). La somme des deux valeurs, la valeur de la mémoire totale du serveur (Ko) et la valeur MemToLeave est une bonne estimation de la consommation de mémoire totale de SQL Server.

L’Analyseur de performances et le Gestionnaire des tâches n’apparaissent pas la mémoire consommée par ces pages de pool de mémoire tampon si une des opérations suivantes est vraie :
  • Si le droit le Verrouiller des Pages en mémoire utilisateur est affecté au compte de démarrage du service SQL Server.
  • Si la mémoire AWE est activée.
Remarque Si les Verrouiller des Pages en mémoire utilisateur droite n’est pas affecté au compte de démarrage du service SQL Server et l' AWE n’est pas activée, le compteur Octets privés pour le processus Sqlservr.exe doit indiquer la mémoire consommée par les Services de SQL pour les différentes instances de SQL Server.

Contrôler la valeur minimale de mémoire disponible dans Windows

Pour analyser la mémoire disponible dans Windows, utilisez une des méthodes suivantes :
  • Le compteur Mégaoctets disponibles dans l’Analyseur de performances.
  • La valeur de la Mémoire physique (Mo) – disponible sous l’onglet performances du Gestionnaire des tâches.

    Remarque Dans certains systèmes d’exploitation, Mémoire physique (Mo) – disponible est étiqueté comme Mémoire physique (Ko) – disponible.

Références


Pour plus d’informations sur la propriété MainPipeClass.BufferTempStoragePath , visitez le site Web de Microsoft Developer Network (MSDN) à l’adresse suivante :

Pour plus d’informations sur la façon d’optimiser les performances du serveur en utilisant les options de configuration mémoire, visitez le site Web de Microsoft Developer Network (MSDN) à l’adresse suivante :

Pour plus d’informations sur les compteurs de l’Analyseur de performances, visitez le site Web de Microsoft à l’adresse suivante :

Pour plus d’informations sur la façon d’utiliser les étendues de multidiffusion, visitez le site Web de Microsoft à l’adresse suivante :
Pour plus d’informations sur le modèle de service incrémentiel pour SQL Server, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
935897 un modèle de service incrémentiel est disponible auprès de l’équipe SQL Server pour proposer des correctifs pour les problèmes signalés



Pour plus d’informations sur le schéma d’appellation des mises à jour de SQL Server, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
822499 Nouveau schéma d’affectation de noms pour les packages de mise à jour logicielle de Microsoft SQL Server


Pour plus d'informations sur la terminologie de mise à jour logicielle, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
Description 824684 terminologie standard utilisée pour décrire les mises à jour logicielles de Microsoft