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

Oracle Discussion :

ORA-01000 maximum cursor exceeded


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Par défaut ORA-01000 maximum cursor exceeded
    Bonjour

    J'utilise une appli sous environnement citrix avec un oracle 9i sous Aix.

    J'accède à Oracle par ADO avec Delphi 7

    Au bout d'un moment d'utilisation, avec une 20aine d'utilisateur, j'obtiens une erreur ORA-01000 : nombre de cursor maximum atteint.

    Comment empecher cette erreur au niveau programmation (fermeture de query déjà effectuée) et non en modifiant les parametres de la base Oracle (augmentation du nombre de curseur disponibles) ?

    Est-ce sur qu'ADO libère bien les cursors à la destruction des Querys ?
    Comment vérifier ou forcer la libération des curseurs inutilisés ?

    Merci pour toutes vos pistes possibles.

  2. #2
    Membre émérite
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Par défaut
    Essaie %isopen pour le cursor explicite

    --> pas besoin d'ouvrir un curseur déjà ouvert
    --> pour fermer , teste si il est ouvert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if [cursor_name]%ISOPEN then close [cursor_name];

    ou utilise oledb

  3. #3
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    IL me semble que le problème se trouve au niveau de la méthode close du composant dérivé tu TQuery qui ne libère pas les ressources (en l'occurence, un curseur oracle) (problème déjà rencontré mais il y a longtemps, sur de vielles versions).

    Je crains qu'il ne faille adapter votre composant de façon à overrider le close et rajuoter le close du query, sauf si une nouvelle version corrige le bug...

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Certaines appli gardent les curseurs en mémoire pour réutilisation exemple Forms.
    Regarde tes parametres de base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open_cursors
    session_cached_cursors

  5. #5
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Par défaut
    J'utilise les drivers OleDB avec ADO pour attaquer la BDD .
    Donc je ne fais aucune gestion des curseurs explicitement.

    Concernant les query et les tables, je les closes explicitement (MonQuery.Close) dans le programme avant de les detruire moi même.

    Par contre, pour le open_cursors et le session_cached_cursors, il s'agit de paramètres à modifier à partir d'ADO ou de la BDD elle-meme ?

    Merci pour toutes ces pistes en tout cas

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Par défaut
    Citation Envoyé par dd16
    J'utilise les drivers OleDB avec ADO pour attaquer la BDD .
    Donc je ne fais aucune gestion des curseurs explicitement.

    Concernant les query et les tables, je les closes explicitement (MonQuery.Close) dans le programme avant de les detruire moi même.

    Par contre, pour le open_cursors et le session_cached_cursors, il s'agit de paramètres à modifier à partir d'ADO ou de la BDD elle-meme ?

    Merci pour toutes ces pistes en tout cas
    Bonjour,

    Pour ma part, j'utilise les composants dbExpress pour accéder à ma base de données Oracle, via delphi 7 studio
    Je n'ai jamais rencontré de pb de ce type

    Tu n'aurais pas un pb de libération de ton objet TQuery ?
    Essaie d'encapsuler ton instruction dans un bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Try
    ...
    Finally
    TMyQuery.free;
    end;
    A mon avis, il faudrait que tu postes ton code sur le forum Delphi et BDD, car il me semble que c'est bien à ce niveau qu'il y a un pb, et non au niveau de la config' Oracle.

    Bon courage

Discussions similaires

  1. ORA-01000: maximum open cursors exceeded
    Par amoula84 dans le forum Oracle
    Réponses: 5
    Dernier message: 01/06/2009, 20h09
  2. ORA-01000: maximum open cursors exceeded
    Par tro2blabla dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/08/2008, 15h00
  3. ORA-01000: maximum open cursors exceeded
    Par tro2blabla dans le forum PL/SQL
    Réponses: 3
    Dernier message: 21/08/2008, 14h56
  4. Réponses: 5
    Dernier message: 04/12/2007, 10h49
  5. [PRO*C][LINUX]ORA-1000:Maximum cursors exceeded
    Par Madeiras dans le forum Interfaces de programmation
    Réponses: 4
    Dernier message: 30/10/2005, 10h16

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