2009-03-24 10 views
8

W ramach modernizacji JRun przechodzimy z JVM 1.4 do JVM o wartości 1.6. Teraz dostaję naprawdę dziwny błąd db Oracle: "OALL8 jest w niespójnym stanie". Powiązany problem polegał na wstawianiu zapytań, które w ogóle nie używają zmiennych wiązania - wszystkie parametry śródliniowe. Jeśli uruchomię zapytanie bez żadnych zmiennych wiążących, otrzymam powyższy błąd. Gdy tylko zmienię jedną z wartości zakodowanych za pomocą zmiennej wiążącej - wszystko działa bezbłędnie.Oracle: OALL8 jest niespójny.

Innym dziwnym bitem jest to, że po wykonaniu kwerendy jest on faktycznie zatwierdzony do bazy danych. Mogę połączyć się z inną sesją i zobaczyć wstawiony wiersz. Próbowałem opakować kwerendę w transakcji i wydaje się, że powiodło się, ponieważ zachowanie jest niezmienione od zapytania bez wyraźnej transakcji.

Oto istotne szczegóły:

Wersja Java: 1.6.0_12-B04
wirtualna wersja urządzenia: 11.2-b01 (serwer HotSpot)
Oracle Server: 10.2.0.4
Oracle Client: 11.1. 0.7.0 do ojdbc6.jar

Aktualizacja: Używam cfqueryparam - nazywane są zmiennymi wiążącymi w świecie wyroczni. Chociaż rozwiązuje to natychmiastowy problem, mamy dość dużą starszą podstawę kodu, której nie możemy realistycznie przejrzeć, aby zaktualizować zapytania w ramach aktualizacji z CF7 do CF8.

Mimo że przytwierdziłem jedną konkretną sytuację, która zawiodła (i hermetyzował ją w teście mxunit) - nie oznacza to, że nie ma innych obszarów, w których może to być problem. Naprawdę chciałbym mieć rozwiązanie, które usuwa błąd OALL8, a nie koduje wokół niego.

Aktualizacja 2: Po sprawdzeniu z naszym DBA ustawił parametr o nazwie CURSOR_SHARING na PODOBNY. Domyślna wartość Oracle to EXACT. To, co się dzieje, kiedy ColdFusion oddaje zapytanie do wykonania, Oracle odwraca wszystkie wartości literalne, by wiązać zmienne i wydaje się mylące w ColdFusion. Przywrócenie ustawienia z powrotem na EXACT umożliwia proste działanie literalnych zapytań.

Aktualizacja 3: Oracle w końcu wydało nam łatkę pozapasmową dla JDBC. Został zidentyfikowany jako błąd JDBC. Najnowsze sterowniki powinny uwzględniać je, gdy zostaną w końcu zaktualizowane. Jeśli masz wsparcie, możesz poprosić o łatę za pośrednictwem swojego systemu TAR.

Odpowiedz

8

Więc ... użyj zmiennych wiążących?

W każdym razie należy ich używać (przez cfqueryparam) ze względów bezpieczeństwa, a jeśli rozwiąże to problem, to jeszcze jeden powód do tego.


Jeśli jesteś zainteresowany tym, co oznacza, że ​​rzeczywisty błąd, Google ma plentyofresults, co sugeruje, że jest to błąd ze sterownikiem JDBC, a nawet sugeruje patch is available.


Ale nie widzę faktycznego pytania w twoim poście ...?

+5

Jak na ironię ta strona jest jednym z 10 najlepszych wyników w Google. –

0

Jeśli prowadzisz zastosowanie w WebLogic, należy skopiować do katalogu instalacyjnego ojdbc.jar "weblogic81 \ server \ lib", dotyczą tego samego pliku nazw.

Powiązane problemy