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 :

Problème de lock sur un package


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Par défaut Problème de lock sur un package
    Bonjour j'ai un problème avec un lock sur un package et une procédure.

    Cette procédure est appelée via des scripts qui sont exécutés en simultané.
    Elle appartient à un package qui s'appelle PCK_UTIL_FTS

    Voici le code
    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
    23
    24
    25
    26
    PROCEDURE PRC_CLEANUP_TABLES_FTS (p_table in VARCHAR2) IS
        PRAGMA AUTONOMOUS_TRANSACTION;
        s_requete      VARCHAR2(4000);
        type r_cursor is REF CURSOR;
        cur_mot r_cursor;
        TYPE MotList IS TABLE OF  varchar2(12);
        result MotList;
        BEGIN
           open cur_mot for 'SELECT G_T0.MOTEUR_ID FROM (SELECT DISTINCT moteur_id FROM '||p_table||')  G_T0 WHERE g_t0.moteur_id IN (SELECT DISTINCT g_t1.moteur_src AS g_f1 FROM TOFTSASSET000_CHAR g_t1)';
           LOOP
              fetch cur_mot BULK COLLECT INTO result;
              exit when cur_mot%NOTFOUND;
           END LOOP;
           close cur_mot;
           for i in 1..result.COUNT
           loop
              s_requete := 'BEGIN PCK_UTIL_EXPL.PRC_TRUNCATE_PART_TABLE('''||p_table||''',''P_'||result(i)||''');END ;';
              EXECUTE IMMEDIATE s_requete;
              COMMIT;
           end loop;
     
        EXCEPTION
            WHEN OTHERS THEN
            ROLLBACK;
            RAISE;
        END;
    Pour résumer, elle fait un truncate de partition en prenant en paramètre le nom de la table. Le problème n'étant pas le contenu du code, mais le fait que j'ai une erreur de lock lorsque je l'éxécute en simutané (en prenant comme paramètre des tables différentes), j'ai un message d'erreur

    "ORA-04021: timeout occurred while waiting to lock object
    ORA-06512: at ""DKEY.PCK_UTIL_FTS"", line 71
    ORA-06512: at line 1"

    Je voulais donc savoir si des locks étaient posés sur une procédure ou des package lorsqu'on les exécute.

    Pour info, la base est une base oracle 10.

    Une des solutions est de séquentialiser les traitements au lieu de les parralléliser mais c'est une solution qu'on voudrait éviter.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 133
    Par défaut
    Pour commencer, pourquoi une requête de sélection aussi compliquée ?
    Celle-ci est bien plus simple pour le même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  moteur_id 
    FROM    ' || p_table || ' g_t0
    WHERE   EXISTS    
            (   SELECT  NULL 
                FROM    TOFTSASSET000_CHAR g_t1
                WHERE   g_t0.moteur_id  = g_t1.moteur_src
            )
    GROUP BY moteur_id
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    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
    Citation Envoyé par makayel Voir le message
    ...
    Je voulais donc savoir si des locks étaient posés sur une procédure ou des package lorsqu'on les exécute.
    ...
    Oui bien sûr, ces verrous vous empêchent de modifier/compiler la procédure pendant son exécution.

    Le problème n'étant pas le contenu du code...
    A quoi sert votre gestionnaire d'exception sinon à vous cacher l'endroit précis où l'exception est arrivée ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/05/2011, 16h44
  2. Problème de lock inutile sur une table
    Par gouffe dans le forum Développement
    Réponses: 14
    Dernier message: 13/01/2011, 11h39
  3. Réponses: 2
    Dernier message: 21/01/2010, 08h50
  4. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56
  5. problème de float sur SQL server 2000.
    Par fidji dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 24/07/2003, 14h15

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