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

Oracle Discussion :

[ora - 04020] deadlock detected while trying


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 14
    Points
    14
    Par défaut [ora - 04020] deadlock detected while trying
    Bonjour,

    en ajoutant l'appel d'une fonction "dev_get_cumul_ca_secteur" à ma vue "ca_secteur3 " , j'obtiens ce message d'erreur "ora - 04020 deadlock detected while trying to lock object ABSIS.CA_Secteur3"

    A quoi cela est-il dû ?

    la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    SELECT   
    sites.cell_denomination as site,
    secteurs_activites.sect_act_libelle as secteur,
    SUM (contrats_ca.cont_ca_tot) AS ca_secteur,
    to_char(contrats_ca.cont_ca_annee) as annee,
    to_char(contrats_ca.cont_ca_mois)as mois,
    dev_get_cumul_ca_secteur(contrats_ca.cont_ca_mois,contrats_ca.cont_ca_annee,sites.cell_denomination,secteurs_activites.sect_act_libelle) as cumul
     
     
     
    FROM contrats_ca, sites, secteurs_activites, contrats
    WHERE contrats.cont_sect_act_fk = secteurs_activites.sect_act_pk
    AND contrats_ca.cont_ca_cont_fk = contrats.cont_pk
    AND contrats_ca.cont_ca_site_fk = sites.cell_pk
    --	 and sites.cell_denomination = 'Site de City2'
    --    AND cont_ca_annee = '2004'
    --   AND cont_ca_mois = 11
    GROUP BY sites.cell_denomination,
             secteurs_activites.sect_act_libelle,
             contrats_ca.cont_ca_annee,
             contrats_ca.cont_ca_mois

    la fonction (qui est valide):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     (
       mois        IN   ca_secteur3.mois%TYPE,
       annee       IN   ca_secteur3.annee%TYPE,
       site        IN   ca_secteur3.site%TYPE,
       secteur   IN   ca_secteur3.secteur%TYPE
    )
       RETURN number
    IS
     
      cumul     ca_secteur3.ca_secteur%TYPE;
     
    BEGIN
     
    SELECT SUM(ca_secteur3.ca_secteur) into cumul
    FROM ca_secteur3 
    WHERE ca_secteur3.site = site 
    AND ca_secteur3.secteur = secteur 
    AND ca_secteur3.annee = annee 
    AND ca_secteur3.mois <= mois;
     
    RETURN cumul;
    END dev_get_cumul_ca_secteur;

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    C'est ta vue qui doit etre invalide.

  3. #3
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Un deadlock génère une trace sur les sessoins incriminées notamment. Vous devriez consulter au moins le 1ères lignes de celles ci.

    Par ailleurs, pour qu'il y ait deadlock, il faut qu'il y ait 2 sessions concurrentes et une application qui gère mal les transactions :

    t1 : User1 verrouille table A, ligne 1
    t2 : User2 verrouille table B, ligne 1
    t3 : User1 chercher à poser un verrou sur TableB, ligne 1 => en attente de la fin de la transaction de User2 (user2 continue sa vie normalement)
    t4 : User2 a besoin de verrouiller la ligne1 de TableA (verrouillée par user1) => User2 est en attente que User1 finisse sa transaction.

    Au final, on a donc User1 qui attent que User2 ait fini
    et User2 qui attent que User1 ait fini.

    => verrou mortel (deadlock)

    Oracle le détecte en terminant la session qui a commencé en dernier sa transaction.

Discussions similaires

  1. [ora - 04020] deadlock detected while trying
    Par khomar dans le forum Oracle
    Réponses: 2
    Dernier message: 16/06/2010, 16h13
  2. Error while trying to create file
    Par inh40 dans le forum Administration
    Réponses: 6
    Dernier message: 22/04/2008, 14h21
  3. Erreur : Error while trying to write to file
    Par WebPac dans le forum Installation
    Réponses: 11
    Dernier message: 19/05/2006, 22h23
  4. Réponses: 7
    Dernier message: 23/11/2005, 10h16
  5. Réponses: 3
    Dernier message: 10/12/2004, 09h42

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