Oracle: OALL8 befindet sich in einem inkonsistenten Zustand

8

Im Rahmen des Upgrades von JRun bewegen wir uns von einem 1.4 JVM zu einem 1.6 JVM. Jetzt bekomme ich einen wirklich seltsamen Oracle DB Fehler: "OALL8 ist in einem inkonsistenten Zustand". Ich habe das Problem festgeklemmt, um Abfragen einzufügen, die überhaupt keine Bind-Variablen verwenden - alle Inline-Parameter. Wenn ich die Abfrage ohne Bind-Variablen ausführen, erhalte ich den obigen Fehler. Sobald ich einen der hartcodierten Werte durch eine Bindevariable ersetze - alles funktioniert ohne Fehler.

Das andere seltsame Bit ist, dass es nach dem Ausführen der Abfrage tatsächlich an die Datenbank übergeben wird. Ich kann mich von einer anderen Sitzung aus verbinden und die eingefügte Zeile sehen. Ich habe versucht, die Abfrage in einer Transaktion zu umbrechen, und es scheint erfolgreich zu sein, da das Verhalten von der Abfrage ohne eine explizite Transaktion unverändert ist.

Hier sind die relevanten Details:

Java Version: 1.6.0_12-b04
Virtual Machine Version: 11.2-b01 (Hotspot-Server)
Oracle Server: 10.2.0.4
Oracle-Client: 11.1.0.7.0 bis ojdbc6.jar

Update: Ich benutze cfqueryparam - sie werden Bind-Variablen in der Orakelwelt genannt. Während das das unmittelbare Problem löst, haben wir eine ziemlich große Legacy-Code-Basis, die wir nicht realistisch durchlaufen können, um die Abfragen als Teil des Upgrades von CF7 auf CF8 zu aktualisieren.

Obwohl ich eine bestimmte Situation, die fehlschlägt (und in einem mxunit-Test gekapselt hat), festgehalten habe, heißt das nicht, dass es keine anderen Bereiche gibt, in denen dies ein Problem darstellen könnte. Ich würde wirklich gerne eine Lösung an Ort und Stelle haben, die den OALL8-Fehler entfernt, anstatt ihn zu programmieren.

Update 2: Nach der Überprüfung mit unserem DBA hatte er einen Parameter namens CURSOR_SHARING auf SIMILAR gesetzt. Der Oracle-Standard ist EXAKT. Was passiert, wenn ColdFusion die auszuführende Abfrage aushändigt, wendet Oracle alle Literalwerte auf Bindevariablen an und das scheint ColdFusion zu verwirren. Wenn die Einstellung auf EXACT zurückgesetzt wird, können die Literalabfragen problemlos ausgeführt werden.

Update 3: Oracle hat uns endlich einen Out-of-Band-Patch für JDBC zur Verfügung gestellt. Es wurde als JDBC-Fehler identifiziert. Die neuesten Treiber sollten es enthalten, wenn sie endlich aktualisiert werden. Wenn Sie Unterstützung haben, können Sie den Patch auch über ihr TAR-System anfordern.

    
Goyuix 24.03.2009, 23:33
quelle

3 Antworten

8

Also ... Bindevariablen verwenden?

Sie sollten sie (via cfqueryparam ) sowieso für die Sicherheit verwenden, und wenn es das Problem löst, ist das noch ein Grund mehr dafür.


Wenn Sie daran interessiert sind, was der eigentliche Fehler bedeutet, hat Google viel results , was darauf hindeutet, dass es sich um einen Fehler beim JDBC-Treiber handelt, und schlägt sogar ein Patch ist verfügbar .


Aber ich sehe keine tatsächliche Frage in Ihrem Beitrag ...?

    
Peter Boughton 24.03.2009, 23:47
quelle
1

Ich fand das Ссылка

Oracle-Patch 4390875

    
Diego Alvarez 24.08.2010 15:54
quelle
0

Wenn Ihre Anwendung in weblogic läuft, sollten Sie ojdbc.jar kopieren, um das Verzeichnis "weblogic81 \ server \ lib" zu installieren, decken Sie die Datei mit dem gleichen Namen ab.

    
billni 06.08.2013 07:43
quelle

Tags und Links