CORRECTIF : Une requête avec un niveau d’isolement de transaction défini à READ UNCOMMITTED échoue avec une erreur 601

N° DE BOGUE : 363988 (SHILOH_BUGS)

Symptômes

Lorsqu’une requête s’exécute avec son niveau d’isolement de transaction défini à READ UNCOMMITTED, SQL Server 2000 annule cette requête et renvoie le message d’erreur suivant :

Serveur : Msg 601, niveau 12, état 3, ligne 14
N’a pas pu continuer l’analyse avec NOLOCK en raison du déplacement de données.

Cause

Ce problème peut se produire lorsqu’une ligne dans une table est supprimée entre le moment de SQL Server lit l’emplacement de la ligne à partir d’un index et le que SQL Server extrait la ligne.

Résolution

Informations sur le service pack

Pour résoudre ce problème, procurez-vous le dernier service pack pour Microsoft SQL Server 2000. Pour plus d’informations, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
290211 comment faire pour obtenir le dernier service pack SQL Server 2000

Informations sur le correctif

La version anglaise de ce correctif dispose des attributs de fichier (ou version ultérieure) répertoriés dans le tableau suivant. Les dates et heures de ces fichiers sont répertoriés dans le temps universel coordonné (UTC). Lorsque vous affichez les informations de fichier, elles sont converties en heure locale. Pour trouver la différence entre l’UTC et l’heure locale, utilisez l’onglet Fuseau horaire dans l’outil Date et heure dans le Panneau de configuration.
DateTimeVersionSize File name
-----------------------------------------------------------------------------

07-Feb-200316:14 786,432 bytes Distmdl.ldf
07-Feb-200316:142,359,296 bytes Distmdl.mdf
29-Jan-200312:25 180 bytes Drop_repl_hotfix.sql
31-Jan-200311:022000.80.763.01,557,052 bytes Dtsui.dll
29-Jan-200315:48 746,470 bytes Instdist.sql
29-Jan-200312:25 1,402 bytes Inst_repl_hotfix.sql
07-Feb-200317:102000.80.765.0 90,692 bytes Msgprox.dll
29-Jan-200311:487.0.9466.0 344,064 bytes Msvcr70.dll
29-Jan-200311:482000.80.722.0 57,904 bytes Osql.exe
07-Feb-200314:23 1,065,895 bytes Replmerg.sql
07-Feb-200317:102000.80.765.0 221,768 bytes Replprov.dll
07-Feb-200317:102000.80.765.0 307,784 bytes Replrec.dll
29-Jan-200315:48 1,084,318 bytes Replsys.sql
29-Jan-200311:482000.80.534.0 127,548 bytes Sqdedev.dll
07-Feb-200317:102000.80.765.0 176,696 bytes Sqlmap70.dll
07-Feb-200317:102000.80.765.0 57,920 bytes Sqlrepss.dll
14-Feb-200313:222000.80.769.0 7,512,145 bytes Sqlservr.exe
29-Jan-200311:482000.80.194.0 180,290 bytes Sqlunirl.dll
07-Feb-200317:102000.80.765.0 45,644 bytes Sqlvdi.dll
07-Feb-200317:102000.80.765.0 82,492 bytes Ssnetlib.dll

Remarque En raison des dépendances de fichiers, le correctif ou la fonctionnalité qui contient les fichiers plus récents peut également contenir des fichiers supplémentaires.

État

Microsoft a confirmé qu’il s’agit d’un problème dans les produits Microsoft répertoriés dans la section « S’applique à ». Ce problème a été corrigé dans Microsoft SQL Server 2000 Service Pack 4.

Plus d'informations

Après avoir installé le correctif, vous pouvez utiliser l’indicateur de trace 9134 pour modifier le comportement de SQL Server. Pour activer l’indicateur de trace 9134 afin qu’il est activé chaque fois que SQL Server démarre, ajouter l’indicateur de trace en tant que paramètre de démarrage de SQL Server. Pour ajouter l’indicateur de trace 9134 comme paramètre de démarrage de SQL Server, procédez comme suit :
  1. Dans SQL Server Enterprise Manager, sélectionnez le serveur qui exécute SQL Server, puis cliquez sur
    Propriétés.
  2. Dans l’onglet Général , cliquez sur Paramètres de démarrage.
  3. Dans la zone paramètre , tapez
    -T9134et cliquez sur Ajouter, puis cliquez sur
    OK.
  4. Dans la boîte de dialogue SQL Server Properties(Configure) - <Nom_serveur> , cliquez sur OK.
  5. Redémarrez le service SQL Server pour le nouveau paramètre prenne effet.
Comme alternative, vous pouvez exécuter la requête suivante dans l’Analyseur de requêtes pour activer l’indicateur de trace dynamiquement :
DBCC TRACEON (9134, -1)
Toutefois, si vous n’ajoutez pas l’indicateur de trace 9134 comme paramètre de démarrage, l’effet de la commande DBCC TRACEON est perdue au redémarrage du service SQL Server.

Lorsque l’indicateur de trace 9134 est activé et qu’une ligne est supprimée ou modifiée entre le moment de SQL Server lit l’emplacement de la ligne et de l’heure, qu'il extrait la ligne au moyen d’une recherche de signet, la requête ne sera pas abandonner ou renvoyer l’erreur 601. Au lieu de cela, SQL Server ignore la ligne ne peut pas être localisée et il continue à rechercher des lignes supplémentaires qui répondent aux critères de la requête. Par conséquent, l’exécution de la requête se poursuit ; Toutefois, SQL Server retourne les résultats ne peuvent pas inclure les lignes qui ont été supprimés ou déplacés lors de l’exécution de la requête.

Remarque Les informations dans cet article et la trace de pavillon ne s’appliquent qu’à une requête qui s’exécute avec le niveau d’isolement de Transaction défini à READ UNCOMMITTED. Les informations ne s’applique pas à une requête est exécutée avec l’option d’optimiseur NOLOCK. Dans ce cas, le comportement reste inchangé à partir de ce qui est décrit dans la section « Symptômes ».

En outre, l’indicateur de trace n’affecte pas le fait que les autres incohérences de données et des erreurs peuvent se produire lors de la lecture de données non validées. Pour plus d’informations sur les niveaux d’isolation pris en charge par SQL Server et de l’impact de chaque niveau d’isolement, consultez la rubrique « Locking » dans la documentation en ligne de SQL Server.

Microsoft ne recommande pas l’utilisation de cet indicateur de suivi, sauf si toutes les conditions suivantes s’appliquent :
  • L’application en cours d’utilisation requiert un niveau d’isolement READ UNCOMMITTED.
  • L’application en cours d’utilisation est confronté à un grand nombre de 601 erreurs.
  • Vous comprenez que lorsque vous utilisez l’indicateur de trace, les lignes qui ont été supprimés ou déplacés lors de l’exécution de la requête sont ignorées.
Remarque Avant d’utiliser le niveau d’isolation READ UNCOMMITTED, vous devez comprendre sa fonctionnalité. Pour plus d’informations sur le niveau d’isolation READ UNCOMMITTED, visitez le site Web de Microsoft Developer Network (MSDN) à l’adresse suivante :

Références

Pour plus d’informations, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
235880 INF : indicateur d’optimiseur UNCOMMITTED NOLOCK ou de lecture de niveau d’isolement génère l’erreur 605
Pour plus d’informations, reportez-vous aux sites Web MSDN suivants :
Propriétés

ID d'article : 815008 - Dernière mise à jour : 27 janv. 2017 - Révision : 1

Commentaires