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 :

Compilation d'une procédure qui plante en fonction du nom de la procédure


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Points : 123
    Points
    123
    Par défaut Compilation d'une procédure qui plante en fonction du nom de la procédure
    Bonjour,

    j'ai une procédure qui s'appelle UPDATE_MANAGER. J'ai fait une modification dessus. Je recompile, mais là je m'aperçois que la compilation, d'ordinaire rapide, s'éternise ! En essayant de stopper la compilation puis de la relancer, j'arrive même à faire planter mon client PL/SQL !
    En modifiant le nom de la procédure, par exemple UPDATE_MANAGER_BIS, la compilation fonctionne normalement et en quelques secondes à peine.

    Donc en clair, si je compile le même code mais avec deux noms de procédures différents, dans un cas ça marche, et dans l'autre ça fait tout planter.

    Est-ce que quelqu'un aurait une idée pour comprendre d'où vient le problème ?

    Pour info j'utilise un client PL/SQL Developer 7, mais ma collègue a essayé avec un client TOAD et reproduit le même problème. La base est sur Oracle 10g.

    Merci

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    la procédure doit être utilisée, elle est donc lockée, c'est pourquoi tu ne peux pas la recréer

  3. #3
    Membre régulier Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Points : 123
    Points
    123
    Par défaut
    Dans ce cas je me permets de poser une deuxième question : comment peut-on forcer le "déverrouillage" de cette procédure ?

    Je ne m'explique pas vraiment comment elle peut être utilisée actuellement, mais j'imagine qu'il n'y a pas d'autre explication.

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Ca je ne sait pas, j'ai déjà souvent eu le problème et en fait c'était un lock au niveau mémoire... un restart de la base résout le problème mais c'est pas vraiment une solution

  5. #5
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Des fois quand on utilise des mots clés dans le nom de la procédure, ca peut planter la compilation,(dans ton cas UPDATE). Une solution temporaire est de créer la procédure avec un autre nom puis la recréer avec l'ancien nom.
    Sinon, evite les mots clés dans les noms de procédures.

  6. #6
    Membre régulier Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Points : 123
    Points
    123
    Par défaut
    J'ai déjà essayé cette manip mais ça n'a pas marché.
    En revanche, lorsque je renomme la procédure, ça fonctionne très bien même si je laisse "UPDATE" dans le nom. Et ça fonctionnait avant, donc je pense pas que le UPDATE y soit pour quoi que ce soit (pas de cette manière en tout cas).

  7. #7
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Bref, c'est quoi le problème ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> r
      1  create or replace procedure UPDATE_MANAGER is
      2   begin
      3     null;
      4* end;
     
    Procédure créée.
    SQL> show errors
    Pas d'erreur.

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    le problème c'est surement un latch sur la procédure ce qui d'après Bouyao peut arriver quand on utilise des mots réservés dans le nom de la procédure. Félicitations, tu as montré que tu n'avais pas ce problème

    Pour avoir les détails du probléme tu peux lire le premier post aussi

  9. #9
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par orafrance Voir le message
    le problème c'est surement un latch sur la procédure ce qui d'après Bouyao peut arriver quand on utilise des mots réservés dans le nom de la procédure. Félicitations, tu as montré que tu n'avais pas ce problème

    Pour avoir les détails du probléme tu peux lire le premier post aussi
    Le latch sur la procédure arrive quand la procédure est utilisée et non pas parce qu'elle s'appèle UPDATE_BLABLA.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE procedure UPDATE_MANAGER IS
    begin
      dbms_lock.sleep(seconds => 60);
    end;
    /
    exec Update_manager
    /
    et dans une autre session fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter procedure update_manager compile

  10. #10
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    J'ai déjà vu ce genre de blocage. A l'époque, le développeur tentait de recompiler une procédure en cours d'exécution. Il fallait killer la session pour sortir du panier de crabe...
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  11. #11
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    C'est ce que je disais mais malheureusement j'ai déjà vu une procédure bloquée sans session qui l'utilisait

    Citation Envoyé par mnitu Voir le message
    Le latch sur la procédure arrive quand la procédure est utilisée
    lit ma première réponse On est d'accord

    Citation Envoyé par mnitu Voir le message
    et non pas parce qu'elle s'appèle UPDATE_BLABLA.
    Si bouyao a déjà eu le problème, je ne vois pas pourquoi on remettrait sa parole en cause.

  12. #12
    Membre actif
    Avatar de (Benoit)
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 184
    Points : 289
    Points
    289
    Par défaut
    Si tu utilises PLSQL Developper, vas dans le menu Outils -> Sessions
    Tu peux voir toutes les sessions actives sur l'instance de ta bdd
    Et pour chaque session, tu peux lister les requêtes en cours, les locks d'objets, les curseurs... tu identifies la session qui locke ta procédure, et tu peux la killer, ou voir pourquoi cette session locke ta procédure.
    "J'adorerais changer le monde, mais pas moyen de mettre la main sur le code source."
    chez moi

  13. #13
    Membre régulier Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Points : 123
    Points
    123
    Par défaut
    Bon le problème a été résolu entretemps par un dba qui passait par là, mais faudra que j'aille faire un tour dans le menu que tu indiques. Je regarderai ça lundi matin.


  14. #14
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Essayons de comprendre ce qui c'est passé.
    j'ai une procédure qui s'appelle UPDATE_MANAGER. J'ai fait une modification dessus. Je recompile, mais là je m'aperçois que la compilation,
    d'ordinaire rapide, s'éternise !
    Comme a dit orafrance et SheikYerbouti c'est que la procedure peut être verouillé par un autre utilisateur pendant la compilation. Oracle a besoin
    d'un verrou et d'un pin du library cache pendant la compilation. Cela guarantie que personne n'utilise la procédure pendant la compilation puisque
    la définition de cet objet va être modifié ce qui oblige la suppression puis la création de la procédure avec la nouvelle définition.

    En essayant de stopper la compilation puis de la relancer, j'arrive même à faire planter mon client PL/SQL !
    Le fait de stopper la compilation, le verrou posé par la compilation ne s'est pas libéré. Dans le pool partagé le verrou se pose toujours sur le nom de l'objet.
    Le fait de recompiler l'objet ou même de de le supprimer s'echoue. la meilleur solution et de redémarrer la base en mode restreint et de compiler ou supprimer
    l'objet.

    En modifiant le nom de la procédure, par exemple UPDATE_MANAGER_BIS, la compilation fonctionne normalement et en quelques secondes à peine.
    Le fait de renommer l'objet, (comme le verrou se pose toujours sur le nom de l'objet) tout se passe bien.

    Voila l'explication.

    Dans certains versions Oracle, le fait d'utiliser certains mots reservés dans les noms des procedures et dans certains conditions peut planter la re-compilation
    ou la suppression de cet objet.

  15. #15
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par bouyao Voir le message
    Essayons de comprendre ce qui c'est passé.
    ...

    Voila l'explication.
    C'est OK et je suis à 100% d'accord avec vous.
    Citation Envoyé par bouyao Voir le message
    ...
    Dans certains versions Oracle, le fait d'utiliser certains mots reservés dans les noms des procedures et dans certains conditions peut planter la re-compilation
    ou la suppression de cet objet.
    Par contre ici y en a trop des "certains". Pourriez-vous fournir au moins un exemple ?

  16. #16
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Citation Envoyé par mnitu Voir le message
    C'est OK et je suis à 100% d'accord avec vous.


    Par contre ici y en a trop des "certains". Pourriez-vous fournir au moins un exemple ?
    Je n'ai pas la source du noyau oracle pour te donner un exemple, ça arrive que la mémoire soit corrompus et le "_" se transforme en blanc ou en ".". Comme UPDATE_MANAGER se lit comme "UPDATE MANAGER" ou "UPDATE.MANAGER".

    J'ai eu ce phénomène en 9i et en lisant le dump de la mémoire j'ai remarqué le phénomène que j'ai décris avant.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/09/2009, 17h48
  2. compilation d'une appli qui comprend plusieurs projets
    Par r0d dans le forum Code::Blocks
    Réponses: 7
    Dernier message: 17/01/2008, 12h40
  3. Réponses: 1
    Dernier message: 28/12/2007, 12h14
  4. Réponses: 4
    Dernier message: 24/01/2007, 19h45
  5. [Upload] Upload qui plante en fonction de la taille
    Par jeyce dans le forum Langage
    Réponses: 5
    Dernier message: 10/07/2006, 10h19

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