|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 771 ![]() |
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... |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
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: 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/ |
|
|
00
|
|
|
#3 |
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 771 ![]() |
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
n'indique aucun verrou en cours. Je vais voir comment mettre en place les traces SQL dont tu parles. Merci pour l'info |
|
|
00
|
|
|
#4 |
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 771 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com