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

SQL Oracle Discussion :

Oracle11 et problème avec le MERGE [11g]


Sujet :

SQL Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut Oracle11 et problème avec le MERGE
    Oracle 11.2.0.4

    Bonjour,

    En passant de Oracle10g à Oracle11g, nous avons identifié un souci dont je ne trouve pas de trace sur les forums :
    J'ai une procédure I_VALUE (1234, 'abcd') qui fait :
    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
    MERGE 
        INTO    VALUE
        USING    dual
        ON        (
                THEIDT= I_ARG1 and
                THECHAR= I_ARG2  
                )
        WHEN MATCHED
        THEN
            UPDATE
            SET    FLAG= 1,
                DATMAJ = sysdate
        WHEN NOT MATCHED
        THEN
            INSERT (THEIDT, THECHAR, FLAG, DATMAJ)
            VALUES (I_ARG1, I_ARG2, 0, sysdate)
        ;
    Si j'exécute le merge seul, ça passe direct.
    Mais si j'appelle la procédure qui appelle juste ce simple merge --> ça reste coincé.

    En observant, les DBA ont vu que le merge déclenchait l'ouverture d'une seconde session.
    ==>connaissez-vous une différence de comportement Oracle10g / Oracle11g sur cette question? Que faire?


    Merci.

  2. #2
    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
    Non, vous vous trompé certainement ainsi que votre Dba. Si ça reste "coincé" c'est que très probablement la table à mettre à jour est verrouillée d'une façon ou d'une autre. Vous devez analyser cela avec plus d'attention ou poster un example plus proche de la réalité parce que votre procédure devrait forcement être plus complexe que la simple exécution de la instruction Merge.

    PS. Votre procédure contient un pragma autonomous transaction au début ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Vraiment, je peux t'assurer que la procédure ne fait que le merge, sans aucune autre "fioriture" de type pragma autonomous transaction.

    Du coup je suis un peu dans l'obscurité là mais je vois de manière générale qu'il y a des tonnes de posts sur des locks posés par des merge.

    Oubliez le "ça marche quand j'appelle le merge direct", en fait c'est plus complexe que ça car pour certaines lignes de la table ça fait le merge direct, et pour d'autres, ça mouline à l'infini.
    Très bizarre... pourtant la table n'a pas de trigger...

    Du coup je vais essayer d'obtenir de la part de mes DBA une recompilation des indexes (?)

    EDIT : une session était restée bloquer en faisant une opération sur cette ligne (un Intranet). Une fois l'Intranet éteint, le merge passe autant que les autres.
    (évidemment faudra voir pourquoi la session était restée bloquée, ça n'était pas arruivé quand on était sous Oracle10)

  4. #4
    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
    ...
    Si ça reste "coincé" c'est que très probablement la table à mettre à jour est verrouillée d'une façon ou d'une autre.
    ...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Bon pour finir, voici le souci :
    on pointait sur différents drivers (donc pas que celui adapté à Oracle11)

    D'où les problèmes en cascade.

    PS : j'avais bien lu ton message, la répétition du passage contenant "d'une façon ou d'une autre" ne me semblait donc pas nécessaire...

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

Discussions similaires

  1. [InstallShield]Problème avec les merge module
    Par dm38 dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 03/03/2010, 14h28
  2. [CruiseControl] Problème avec svn merge
    Par nzo70 dans le forum Intégration Continue
    Réponses: 1
    Dernier message: 25/06/2009, 18h04
  3. [CLI] Problème avec svn merge
    Par babo dans le forum Subversion
    Réponses: 1
    Dernier message: 09/09/2008, 13h38
  4. EJB3: Problème avec CascadeType.MERGE
    Par quicotte@gmail.com dans le forum JPA
    Réponses: 1
    Dernier message: 14/06/2007, 09h25
  5. Réponses: 3
    Dernier message: 25/05/2007, 10h41

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