J'ai trouvé mon nombre maximum de curseurs par base de données 300 à partir de la requête suivante: J'ai essayé de mettre à jour le montant à 1000 avec ceci: p> SQL Error: ORA-02030: can only select from fixed tables/views
02030. 00000 - "can only select from fixed tables/views"
*Cause: An attempt is being made to perform an operation other than
a retrieval from a fixed table/view.
*Action: You may only select rows from fixed tables/views.
3 Réponses :
En supposant que vous utilisiez un SPFILE pour démarrer la base de données
alter system set open_cursors = 1000
Merci. Je l'ai poussé à 3k et je dépasse toujours le maximum open_cursors. Je ne crée pas de curseurs explicitement, donc je vais devoir examiner le code de la raison pour laquelle il génère tant de personnes. Il existe un couple préparé des déclarations et des résultats ouverts en même temps, mais ils sont tous fermés à terme, alors je ne pense pas que ce soit une fuite.
@Yellavon - Si nous parlons d'une application Java lorsque vous parlez de PreachStatement CODE> et
RESUNTSET CODE> Des objets CODE>, je parie avec plaisir que vous ne fermez pas tout de fermeture correctement tous les temps. J'aurais placé un grand pari que l'application Java fuit des curseurs et que vous devrez déboguer cette question.
Je crois que tout se ferme parce que lorsque j'exécute cette méthode sur un jeu de données plus petit, cela fonctionne bien et la valeur du courant de curseur ouvert est la même avant et après sur le plus petit jeu de données. Je n'ai cependant pas imbriqué de préparation: ResultatsSet Rs = ps.executequery (); tandis que (rs.next ()) {long seqnum = rs.getlong (1); ps1.setlong (1, seqnum); ps1.close; } ps.close; code>
Bon appel sur les curseurs qui fuies: p Le code réutilisait préparetsatinements code> de sorte qu'il est donc difficile de dire ce qui se passait. Est-ce une bonne idée, créant un
préparétstatment code>, générant des résultats code> avec celui-ci, la fermeture, puis réaffectant le
préparé (code> avec une requête complètement différente? Je viens de le faire afin que la méthode
() code> a été appelée une seule fois sur un
préparéystatement code> et tous les
Paretstatifs code> et
Resulats code > ont été fermés.
Quelle est la valeur maximale?
@ ADIC.N. - 4294967295 à Oracle 10.1. Si vous envisagez de définir une valeur n'importe où près de cela, cependant, je vous exhorte fortement à reconsidérer et à trouver la fuite sous-jacente du curseur.
Vous pouvez mettre à jour le paramètre sous init.ora dans Oracle \ app \ oracle \ product \ 11.2.0 \ Server \ config \ scripts p>
Augmenter Open_Cursors est une idée B> horrible B>. Je n'ai pas encore vu une application qui a besoin de 300 curseurs ouverts. Tout ce que vous faites en augmentant la valeur, retarder le problème, ne pas résoudre le problème. Presque certainement une fuite de curseur.
@Bobc Et si nous parlons de plusieurs applications partageant une instance de base de données? Il y a des raisons légitimes d'augmenter les limites.
@charlie_pl Nope! Ceci est un paramètre par session.
@Bobc Évidemment, vous n'avez pas utilisé ArcGIS. :)
Exécutez la requête suivante pour rechercher si vous exécutez SPFILE ou non:
alter system set open_cursors = 1000 ;
La limite de 300 est par connexion B>, ce n'est pas une limite supérieure pour toutes les connexions ensemble. Dans la plupart des cas, ce message d'erreur indique un bogue sévère dans votre application, car il ne libère pas correctement les ressources. Vous devriez résoudre le problème dans l'application (la cause de la racine), ne pas combattre le symptôme.