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

Interfaces de programmation Oracle Discussion :

[9i][OCI]Requête bloquante / fetch


Sujet :

Interfaces de programmation Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut [9i][OCI]Requête bloquante / fetch
    Bonjour à tous,

    Sur une interface OCI / C++ que j'ai développée récemment, un utilisateur me signale qu'une requête bloque son client. Après avoir tracé le code, il apparaît que c'est l'appel ::OCIStmtFetch2(...) qui bloque : Oracle ne répond plus.

    La requête en question lit et renvoie la structure d'une table. Ce qui me trouble, c'est que cette même requête, lancée depuis un environnement de test avec la même connexion ( ds, user, pwd ) ne bloque pas. Je ne vois pas bien ce qui motive cette différence de comportement. Si l'un d'entre vous a des pistes de réflexion à me suggérer, je suis preneur...

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Le problème est-il systématique ou non ?

    Cela pourrait être un problème d'attente sur un verrou si votre code fait un SELECT FOR UPDATE par exemple: Essayez d'exécuter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM DBA_BLOCKERS;
    Cette vue retourne l'identifiant d'une session qui détient un verrou sur lequel une autre session est en attente.

    Vous pouvez aussi essayer d'activer la trace SQL dans votre session pour voir l'ordre SQL qui bloque; voir http://leoanderson.developpez.com/tr...ssions-oracle/

  3. #3
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Le blocage est systématique dans cette application là. Avec une autre appli, utilisant les mêmes infos de connexion et la même requête exactement, pas de problème. Il y a des chances que le blocage ne vient pas directement du code du driver, mais je ne vois toujours pas comment débloquer la situation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM DBA_BLOCKERS;
    n'indique aucun verrou en cours.

    Je vais voir comment mettre en place les traces SQL dont tu parles. Merci pour l'info

  4. #4
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Rien de probant dans les traces semble-t-il. Un seul utilisateur connecté (moi-même), pas de requêtes en concurrence. En outre, l'appel à OCIStmtFetch2 bloque sur un simple select, même pas un select for update.

    Je n'arrive toujours pas à trouver ce qui coince. Par rapport aux environnements où "ça marche", la seule différence ici est que :
    - OCI est utilisé en multithread (mais je ne vois pas de threads en concurrence dans ce cas précis)
    - le driver est intégré dans un exécutable qui tourne sous la forme d'un service XP.

    Je suis tenté de penser que c'est de ce dernier aspect que vient le blocage, mais je n'en sais pas plus pour le moment.

Discussions similaires

  1. [PDO] Requête et fetch
    Par ciols dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/12/2013, 11h52
  2. [MySQL] Requête bloquante en MySQL (transactions?)
    Par NeqO55 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 05/02/2010, 10h13
  3. [MySQL] Requête bloquant l'exécution du code PHP (sleep)
    Par P0l0pwp dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/12/2009, 11h35
  4. [PDO] PDO OCI et fetch
    Par maxidoudou dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 11/08/2008, 14h56
  5. Requête SQL bloquante
    Par kirato dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/01/2007, 14h10

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