IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

[SQL 2k] Problème de transaction choisie comme victime


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut [SQL 2k] Problème de transaction choisie comme victime
    Bonjour tout le monde,

    Actuellement j'ai une application faite en VB 6 qui accède à serveur SQL 2K. Mon problème est que je recontre le message d'erreur suivant "La transaction (processus ID = 56) a été bloquée par un autre processus et a été choisie comme victime. Relancer la transaction" quand j'effectue un traitement de facturation.

    Celà est très gênant, même si je récupère l'erreur, car je me retrouve avec une facturation incomplête et un casse tête pour l'utilisateur.
    J'ai environ 200 transactions en 5 minutes sur toutes la bases qui se
    lancent durant ce traitement, dont la moitié pour mon traitement.
    Je multiplie les transactions pour évitez les attentes aux autres utilisateurs.

    Donc ma question est de savoir comment éliminer ces blocages, ou alors au pire comment mdoifier ma procédure pour qu'elle soit prioritaire sur les autres, en cas de blocage c'est une autre qui est choisie comme victime.

    J'attends vos réponses avec impatience parce que je me trouve dans une solution compliquée (facturation du semestre).

    Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu te trouves apparemment confronté à des problèmes de deadlocks. Cette recherche sur Google peut déjà t'aider. Et plus particulièrement ce lien.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Par défaut
    Bonjour.
    Quel type de transaction utilses-tu ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut
    Merci pour vos réponses.

    Mais je n'avance pas bien, je ne connais pas bien le système de deadlocks et de plus avec mon anglais très moyen j'ai du mal à comprendre.

    Sinon ce que je sais avec certitude c'est que ce problème arrive quand 2 transactions différentes veulent insérer une ligne dans la même table.

    Pour le mode de transaction je ne saurais pas répondre, je peux juste dire que j'utilise les transactions à partir de VB directement et pas dans mes requêtes SQL.
    J'utilise :
    Dim ADOcnn As ADODB.Connection
    ADOcnn.begintrans

    Puis
    ADOcnn.CommitTrans
    ou
    ADOcnn.RollbackTrans

    J'ai toujours une gestion d'erreur pour effectuer un de ses 2 opérations et ne pas laisser de transaction en cours.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Change le niveau d'isolation des transactions.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Par défaut
    Le problème pourrait encore arriver. Il faut donc prévoir le coup.

    Et trapper l'exception SQL levée dans ce cas (code 1205). Tu peux dans ce cas annuler ta transaction (vaut mieux être sûr) et relancer ta procèdure.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut
    Merci pour la réponse, ça je veux essayer de la faire et ça devrait aller.

    Par contre ça m'amène à la question suivante, depuis 1h j'essai de reproduire mon cas de deadlock sur mon serveur de dev mais sans succès. Est-ce que j'aurais un moyen de le reproduire afin de tester que ma correction fonctionne correctement ?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Par défaut
    Si tu ne modifies pas ton niveau d'isolation de transaction, c'est qu'il est "RepeatableRead" par défaut. Si tu lances ta transaction en niveau "Serializable", tu as plus de chance d'être gêné par les deadlocks (donc n'oublie pas de l'enlever après tes tests).
    Mais si tu testes seul...tu vas avoir du mal ou alors en lançant des requêtes en parallèle via l'analyseur.

Discussions similaires

  1. [Linq to SQL] problème de transaction avec update
    Par jowsuket dans le forum Accès aux données
    Réponses: 2
    Dernier message: 25/09/2008, 10h15
  2. Transaction bloquée choisie comme victime
    Par prodi_64 dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 21/02/2008, 17h26
  3. Encore un petit problème de transaction
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/03/2005, 16h13
  4. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  5. Réponses: 4
    Dernier message: 10/06/2004, 18h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo