ich möchte in eine Oracle DB ein insert-script reinschreiben und bekomme beim ändern, bzw. nach dem einsetzen und das versuchen des speicherns immer den fehler:
maximale anzahl an offener cursor überschritten.
welche änderung muss ich vornehmen, bzw. was ist an meinem script dann falsch???
ich möchte in eine Oracle DB ein insert-script reinschreiben
und bekomme beim ändern, bzw. nach dem einsetzen und das
versuchen des speicherns immer den fehler:
maximale anzahl an offener cursor überschritten.
Hallo Micha!
welche änderung muss ich vornehmen, bzw. was ist an meinem
script dann falsch???
Das kann Dir ohne den Source-Code gesehen zu haben wohl kaum einer sagen. Ich würde ansonsten davon ausgehen, dass Du genau das falsch machst, was die Fehlermeldung Dir sagen will: Du machst zu viele Cursors auf… Mehr kann man ohne den Code gesehen zu haben beim Besten Willen nicht sagen (ausser man fängt an wild draufloszuraten)
ohne source-code-einsicht (was ist los, martin? ich bin enttäuscht :
falls _normaler_ sql-zugriff:
in der init.ora-datei gibt’s den parameter max_open_cursors, wenn du den auch nur ein bißchen erhöhst (kannst ruhig ein paar hunderter drauflegen), ist die fehlermeldung weg (danach kannst du den parameter anpassen, falls die db mucken macht bzw. die performance den bach runter geht)
falls du aber nicht per _normalen_ sql zugreifst, sondern durch bsp. java, mußt du aufpassen, daß sämtliche cursor geschlossen werden
Das kann Dir ohne den Source-Code gesehen zu haben wohl kaum
einer sagen. Ich würde ansonsten davon ausgehen, dass Du genau
das falsch machst, was die Fehlermeldung Dir sagen will: Du
machst zu viele Cursors auf…
oder - wie ganz oben - die db ist einfach zu klein dimensioniert …
ohne source-code-einsicht (was ist los, martin? ich bin
enttäuscht :
falls _normaler_ sql-zugriff:
in der init.ora-datei gibt’s den parameter max_open_cursors,
wenn du den auch nur ein bißchen erhöhst (kannst ruhig ein
paar hunderter drauflegen), ist die fehlermeldung weg (danach
kannst du den parameter anpassen, falls die db mucken macht
bzw. die performance den bach runter geht)
Jetzt bin ich aber von dir enttäuscht, tom ! Das könnte zwar (unter Umständen) den Fehler verstecken, beheben tut es ihn aber eher nicht (ausser das Script ist schon richtig und nur der max_open_cursors ist zu niedrig, was meiner Erfahrung nach nicht so oft der Fall ist).
Folgendes Script bringt dir den Fehler aber mit Sicherheit immer, egal wie hoch du max_open_cursors setzt:
begin
declare cCur INTEGER;
begin
LOOP
cCur := DBMS\_SQL.OPEN\_CURSOR();
END LOOP;
end;
end;
Deshalb auch mein Hinweis: Ohne Sourcecode ist der Fehler nicht 100 %-ig lokalisierbar.
falls du aber nicht per _normalen_ sql zugreifst, sondern
durch bsp. java, mußt du aufpassen, daß sämtliche cursor
geschlossen werden
Das war als dezenter Hinweis gemeint, uns mal hier den Sourcecode reinzustellen (oder zumindest die deiner Meinung nach relevanten Stellen, zumindest aber die Zeile, die den Fehler bringt plus ein bisschen was rundherum).
aber ich weiß ja nichtmal was cursor in dem fall sind…
das ist eher mein prob.
Das sind sämtlich Operationen, die irgendwie auch nur annähernd mit der DB zu tun haben - man glaubt gar nicht, was Oracle intern alles für Aufrufe drinnen hat …
Ein Tip hier ist wirklich der TOAD, bei dem Du im Menüpunkt „Kill/Trace Sessions“ für jede Session das aktuelle Statement und sämtliche offenen Cursor siehst (neben diversen anderen Zeugs natürlich noch)
ahoi, danke für die bemühungen, aber 1. darf ich den garnicht posten, und 2. habe ich den code schon in einer DB drinnen, wollte ihn jedoch nur um ein wort erweitern, dann kam die fehlermeldung.
dann hab ich den komplett gelöscht und hab nur ein wort reingeschrieben und hatte auch den fehler.
es lag also EINDEUTIG nicht an dem Statement, was mir vorher schon klar war.
es war ein Versionskonflikt, mit einem 9.0er client auf eine 8.0 DB von oracle zuzugreifen.