2009-03-24 11 views
8

Im Zuge der Aktualisierung von JRun wird von einer 1.4 JVM auf eine 1.6 JVM umgestellt. 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.Oracle: OALL8 befindet sich in einem inkonsistenten Zustand

Das andere seltsame Bit ist, dass nach der Ausführung der Abfrage tatsächlich an die Datenbank gebunden ist. 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 sind Bind-Variablen in der Orakel-Welt. 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 gekapselt in einem mxunit-Test) fixiert habe - das heißt nicht, dass es keine anderen Bereiche gibt, wo dies ein Problem sein könnte. Ich würde wirklich gerne eine Lösung an Ort und Stelle haben, die den OALL8-Fehler beseitigt, 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 Sie die Einstellung auf EXACT zurücksetzen, können die Literalabfragen problemlos ausgeführt werden.

Update 3: Oracle hat uns schließlich einen Out-of-Band-Patch für JDBC ausgestellt. 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 das TAR-System anfordern.

Antwort

8

Also ... Bind Variablen verwenden?

Sie sollten sie (über cfqueryparam) für Sicherheit trotzdem verwenden, und wenn es das Problem löst, ist das noch mehr Grund, dies zu tun.


Wenn Sie interessiert sind, was der tatsächliche Fehler bedeutet, hat Google plentyofresults, was darauf hindeutet, dass es ein Fehler mit dem JDBC-Treiber ist, und schlägt sogar ein patch is available.


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

+5

Ironischerweise ist diese Seite eines der Top 10 Google-Ergebnis. –

0

Wenn Sie Anwendungslauf in WebLogic Sie ojdbc.jar installieren Verzeichnis "weblogic81 \ server \ lib" kopieren soll, decken den gleichen Namen Datei.