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

PL/SQL Oracle Discussion :

Deadlock Deadlock !


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Par défaut Deadlock Deadlock !
    Salut tout le monde,

    J'ai une question pour ceux qui ont déjà souffert avec les Deadlock sous PL/SQL !! Une procédure que j'ai écrite doit faire un update d'une table et insérer une petite note dans une autre table. Mon problème est que la première table contient un déclencheur qui essaie aussi d'insérer dans la deuxième table...Du coup : Deadlock !!

    Est-ce qu'il y a une solution qui me permettra d'attendre que le déclencheur fasse son insertion avant que je fasse pareil dans ma procédure?

    Merci d'avance

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Le comportement que vous avez décrit ne génère pas automatiquement un deadlock. Vous devez donc détailler un peu ; comme d’hab un exemple sera bienvenu.

  3. #3
    Membre confirmé
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Par défaut
    Je suis d'accord que ça ne génère pas automatiquement un Deadlock (la preuve ça marchait dans autre serveur avant), mais des fois ça le génère !

    Ma procédure met à jour une table (Adresse), puis juste après elle appelle une fonction qui insère une ligne dans une autre table (Memos) (cette fonction fait un COMMIT); Au moment de la mise à jour de la table Adresse, il y a un déclencheur After Update qui insère aussi dans la table Memos (avec COMMIT aussi). C'est à ce moment que le Deadlock peut avoir lieu !

  4. #4
    Membre expérimenté Avatar de mongilotti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2003
    Messages : 314
    Par défaut
    peut etre voir coté wait().

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Peut être il sera bien que vous regardez le fichier d’alerte généré par Oracle suite au deadlock pour comprendre ce qui le provoque réellement parce que votre scénario n’implique pas de deadlock.

  6. #6
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Est-ce qu'il y a une solution qui me permettra d'attendre que le déclencheur fasse son insertion avant que je fasse pareil dans ma procédure?
    Le code que tu décris ne s'exécute pas en parallèle (sauf si tu appelles les procédures avec dbms_job) donc le trigger est terminé lorsque tu appelles ta procédure.

    La seule resource commune dans ce que tu décris est l'insert dans Memos - s'il s'agit de la même clef. Est-ce que ce que tu décris est appelé en parallèle par plusieurs sessions

    Faire un commit dans une procédure (et a fortiori dans un trigger) est probablement signe d'un problème de conception.
    A moins que l'insert dans Memo soit fait en autonomous transaction ?

    Ton scénario peut provoquer un deadlock dans les consitions suivantes:
    - la fonction qui fait l'insert dans Memo est une autonomous transaction
    - et le trigger ne fait pas l'insert dans Memo en autonomous transaction
    - et ces 2 insert concernent la même clef primaire ou la même valeur d'une contrainte d'unicité)

    Est-tu dans ce cas ?

    Cordialement,
    Franck.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb d'accès concurents et de deadlock
    Par Cazaux-Moutou-Philippe dans le forum Bases de données
    Réponses: 14
    Dernier message: 26/01/2006, 21h38
  2. [ora - 04020] deadlock detected while trying
    Par mike devimo dans le forum Oracle
    Réponses: 2
    Dernier message: 21/12/2005, 13h24
  3. [Oracle 9i] Gros problème Deadlock
    Par zestrellita dans le forum Oracle
    Réponses: 4
    Dernier message: 04/11/2005, 09h30
  4. DEADLOCK + RAFRAISHISSEMENT avec Inerbase Express + Int.6
    Par AODRENN dans le forum Bases de données
    Réponses: 1
    Dernier message: 22/09/2005, 16h53
  5. deadlock lors d'un update
    Par jacques trepp dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 14/06/2005, 16h46

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