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: Nombre maximum de curseurs ouverts atteint


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut ORA-01000: Nombre maximum de curseurs ouverts atteint
    Bonjour à tous,

    Je ne sais pas si cette nouvelle discussion à sa place dans cette section mais bon.
    J'ai une application Java qui utilise Hibernate et se connecte à une BDD Oracle.
    Un traitement appel en boucle une requête "select" écrite en SQL natif, qui ouvre systématiquement un curseur mais ne le referme jamais, ce qui aboutit à une erreur Oracle "ORA-01000: Nombre maximum de curseurs ouverts atteint".
    Dans le détail:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ...
    Session session = HibernateUtil.getSession();
    ...
    String sqlQuery = "select MAX(CAST (SUBSTR("...
    ResultSet result = session.connection().createStatement().executeQuery(sqlQuery);
    result.next();
    max = result.getInt(1);
    result.close();
    Le ResultSet est bien clos à chaque appel, mais lorsque je consulte la table V$OPEN_CURSOR pendant l'exécution du traitement je trouve une grande quantité de curseurs concernant l'appel à cette méthode.
    J'ai tenté l'ajout d'un session.close(); mais le résultat est plutôt étrange:
    - je n'ai plus tous les curseurs ouverts
    - le traitement se fini sans erreur (dans la suite les insertions sont faites correctement)
    - je trouve quantité de message d'erreur:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    [18/08/10 10:55:48:443 CEST]  7ceffde MCWrapper     E J2CA0081E: La méthode cleanup a échoué lors de la tentative d'exécution de la méthode cleanup sur la connexion gérée com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl@7171bfdc à partir de la ressource jdbc/capeb_ds. Exception interceptée : com.ibm.ws.exception.WsException: DSRA0080E: An exception was received by the Data Store Adapter. See original exception message: Cannot call 'cleanup' on a ManagedConnection while it is still in a transaction..
    	at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAdapterException.java:217)
    	at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAdapterException.java:171)
    	at com.ibm.ws.rsadapter.AdapterUtil.createDataStoreAdapterException(AdapterUtil.java:191)
    	at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.cleanupTransactions(WSRdbManagedConnectionImpl.java:2179)
    	at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.cleanup(WSRdbManagedConnectionImpl.java:1967)
    	at com.ibm.ejs.j2c.MCWrapper.cleanup(MCWrapper.java:1154)
    	at com.ibm.ejs.j2c.poolmanager.FreePool.returnToFreePool(FreePool.java:286)
    	at com.ibm.ejs.j2c.poolmanager.PoolManager.release(PoolManager.java:1209)
    	at com.ibm.ejs.j2c.MCWrapper.releaseToPoolManager(MCWrapper.java:1661)
    	at com.ibm.ejs.j2c.ConnectionEventListener.connectionClosed(ConnectionEventListener.java:207)
    	at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.processConnectionClosedEvent(WSRdbManagedConnectionImpl.java:875)
    	at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.closeWrapper(WSJdbcConnection.java:466)
    	at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.close(WSJdbcObject.java:127)
    	at net.sf.hibernate.connection.DatasourceConnectionProvider.closeConnection(DatasourceConnectionProvider.java:64)
    	at net.sf.hibernate.impl.BatcherImpl.closeConnection(BatcherImpl.java:308)
    	at net.sf.hibernate.impl.SessionImpl.disconnect(SessionImpl.java:3387)
    	at net.sf.hibernate.impl.SessionImpl.close(SessionImpl.java:584)
    	at fr.capeb.gestionfiches.hibernate.helper.KeyHelper.findByCodeSyndGeo(KeyHelper.java:66)
    	at fr.capeb.gestionfiches.hibernate.facade.RelArtisanCcpbHistoFacade.getCompteur(RelArtisanCcpbHistoFacade.java:25)
    	at fr.capeb.gestionfiches.hibernate.helper.CotMtPartHelper.miseAjourCotMtPart(CotMtPartHelper.java:280)
    	at fr.capeb.gestionfiches.service.TraitementImportCCPB.traiteCotisationExistante(TraitementImportCCPB.java:393)
    	at fr.capeb.gestionfiches.service.TraitementImportCCPB.lancerImport(TraitementImportCCPB.java:127)
    	at fr.capeb.scheduler.task.impl.TacheImportCCPB.execute(TacheImportCCPB.java:50)
    	at fr.capeb.scheduler.task.Task.run(Task.java:96)
    	at java.lang.Thread.run(Thread.java:513)
     
    [18/08/10 10:55:48:630 CEST]  7ceffde WSRdbManagedC W DSRA0180W: Exception détectée lors de ManagedConnection.destroy(). L'exception est : com.ibm.ws.exception.WsException: DSRA0080E: An exception was received by the Data Store Adapter. See original exception message: Cannot call 'cleanup' on a ManagedConnection while it is still in a transaction..
    	at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAdapterException.java:217)
    	at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAdapterException.java:171)
    	at com.ibm.ws.rsadapter.AdapterUtil.createDataStoreAdapterException(AdapterUtil.java:191)
    	at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.cleanupTransactions(WSRdbManagedConnectionImpl.java:2179)
    	at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.destroy(WSRdbManagedConnectionImpl.java:1707)
    	at com.ibm.ejs.j2c.MCWrapper.destroy(MCWrapper.java:1304)
    	at com.ibm.ejs.j2c.poolmanager.FreePool.returnToFreePool(FreePool.java:299)
    	at com.ibm.ejs.j2c.poolmanager.PoolManager.release(PoolManager.java:1209)
    	at com.ibm.ejs.j2c.MCWrapper.releaseToPoolManager(MCWrapper.java:1661)
    	at com.ibm.ejs.j2c.ConnectionEventListener.connectionClosed(ConnectionEventListener.java:207)
    	at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.processConnectionClosedEvent(WSRdbManagedConnectionImpl.java:875)
    	at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.closeWrapper(WSJdbcConnection.java:466)
    	at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.close(WSJdbcObject.java:127)
    	at net.sf.hibernate.connection.DatasourceConnectionProvider.closeConnection(DatasourceConnectionProvider.java:64)
    	at net.sf.hibernate.impl.BatcherImpl.closeConnection(BatcherImpl.java:308)
    	at net.sf.hibernate.impl.SessionImpl.disconnect(SessionImpl.java:3387)
    	at net.sf.hibernate.impl.SessionImpl.close(SessionImpl.java:584)
    	at fr.capeb.gestionfiches.hibernate.helper.KeyHelper.findByCodeSyndGeo(KeyHelper.java:66)
    	at fr.capeb.gestionfiches.hibernate.facade.RelArtisanCcpbHistoFacade.getCompteur(RelArtisanCcpbHistoFacade.java:25)
    	at fr.capeb.gestionfiches.hibernate.helper.CotMtPartHelper.miseAjourCotMtPart(CotMtPartHelper.java:280)
    	at fr.capeb.gestionfiches.service.TraitementImportCCPB.traiteCotisationExistante(TraitementImportCCPB.java:393)
    	at fr.capeb.gestionfiches.service.TraitementImportCCPB.lancerImport(TraitementImportCCPB.java:127)
    	at fr.capeb.scheduler.task.impl.TacheImportCCPB.execute(TacheImportCCPB.java:50)
    	at fr.capeb.scheduler.task.Task.run(Task.java:96)
    	at java.lang.Thread.run(Thread.java:513)
    En attente donc d'une âme charitable qui pourra m'aider.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bon bein j'ai trouvé.
    J'ai ajouté l'instruction result.getStatement().close() avec l'appel à result.close() et la je n'ai pas autant d'ouverture de curseur que d'appel à cette méthode.

  3. #3
    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
    Mettez une variable de type Statement identifiée et appelez la methode Statement.close pour fermer le curseur.

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

Discussions similaires

  1. ORA-01000: nombre maximum de curseurs ouverts dépassé
    Par opensource dans le forum Débuter
    Réponses: 3
    Dernier message: 20/04/2011, 14h30
  2. ORA-01000: nombre maximum de curseurs ouverts dépassé
    Par ouadie99 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 01/09/2008, 11h03
  3. Réponses: 6
    Dernier message: 17/09/2007, 13h50
  4. Réponses: 4
    Dernier message: 10/07/2007, 16h43
  5. [Oracle] Nombre maximum de curseurs ouverts atteint
    Par lionheart33806 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/10/2006, 13h06

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