Numéro d'article: 118552 - Dernière mise à jour: jeudi 22 février 2007 - Version: 5.3

Description de la gestion des conditions de blocage dans SQL Server

A noterCet article s'applique à un système d'exploitation différent de celui que vous utilisez. Le contenu de l'article qui ne vous concerne peut-être pas est désactivé.
Agrandir tout | Réduire tout

Résumé

Un blocage est une condition où processus 2 (ou plus) tentent d'accéder à une ressource de l'autre détient un verrou. Dans la mesure où chaque processus a une demande pour l'autre ressource, aucun ne peut être effectuée. Lorsqu'un blocage est détecté, SQL Server annule la transaction qui a le moins de temps de traitement et retourne message d'erreur 1205 à l'application. Message d'erreur 1205 termine le lot en cours et restaure la transaction en cours.

Plus d'informations

Dans certains cas, une condition de blocage peut provoquer une commande de DB-Library (DB-lib) (par exemple, dbsqlexec, dbsqlok ou dbresults) renvoi de FAIL. Il incombe toujours du programme pour vérifier les codes de retour à partir de chaque commande de DB-lib. Si FAIL est renvoyé par une de ces commandes de DB-lib, le programme doit annuler le traitement par lots et pas tenter de continuer. Dans certains cas, il est possible de poursuivre l'exécution des commandes suivantes dans le lot. Cependant, étant donné qu'une situation de blocage est survenue et que la commande qui a provoqué son a été restaurée, commandes ultérieure dans le lot va probablement échouer avec une erreur plus grave, tel qu'un objet introuvable.



Dans d'autres cas, une condition de blocage ne provoquera pas d'une commande de DB-lib renvoi de FAIL. Pour gérer cette condition, le programme doit rechercher le message de 1205 dans le Gestionnaire de messages, utilisez la fonction dbsetuserdata pour communiquer cela à votre application (un exemple peut être trouvé dans le chapitre 4 «DB-Library fonctions» dans SQL Server "Référence du programmeur pour C» sous dbsetuserdata). Le programme doit ensuite vérifier pour l'indicateur de blocage après chaque appel de DB-Library et annuler le traitement par lots si un blocage est détecté.



Il semble inutile d'annuler un traitement par lots après avoir reçu un message de blocage 1205, il est nécessaire car le serveur ne sont pas toujours abandonne le lot dans une situation de blocage. Si le traitement par lots n'est pas annulé, toute tentative pour soumettre un nouveau lot peut entraîner une erreur DB-Library 10038 «Résultats en attente».

Vous trouverez une description de l'interblocage et un exemple de comment détecter une condition de blocage dans «L'annexe E optimisation cohérence et simultanéité» dans le SQL Server pour Windows NT «Guide de référence du programmeur pour C».

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 4.21a Standard
  • Microsoft SQL Server 2000 Standard
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Mots-clés : 
kbmt kbinfo kbprogramming KB118552 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 118552  (http://support.microsoft.com/kb/118552/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.