Probleme mit Oracle

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???

Danke Vorab

Gruß Micha

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)

Gruß,
Martin

Danke für die antwort, ok, du hast recht, ohne den code wirds schwer.
aber ich weiß ja nichtmal was cursor in dem fall sind…
das ist eher mein prob.

gruß micha

hi!

ohne source-code-einsicht (was ist los, martin? ich bin enttäuscht :wink::

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 …

grüße,
tomh

Hallo tomh! Hallo Michael!

hi!

ohne source-code-einsicht (was ist los, martin? ich bin
enttäuscht :wink::

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 :wink:! 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

Nicht nur dann, wie ich meine…

Gruß,
Martin

Hallo Micha!

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).

Gruß,
Martin

Hi!

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)

Grüße,
Tomh

Danke, das hilft mir weiter. jetzt weiß ich endlich was
cursor sind!!

und ich habe auch schon das prob gelöst.

danke

Micha

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.