2009-03-24 2 views
8

В рамках обновления JRun мы переходим от 1.4 JVM к 1.6 JVM. Теперь я получаю действительно странную ошибку оракула db: «OALL8 находится в противоречивом состоянии». Я вставил проблему, чтобы вставить запросы, которые не используют переменные связывания вообще - все встроенные параметры. Если я запускаю запрос без каких-либо переменных связывания, я получаю вышеуказанную ошибку. Как только я заменю одно из жестко закодированных значений переменной привязки - все работает без ошибок.Oracle: OALL8 находится в противоречивом состоянии

Другой странный бит заключается в том, что после выполнения запроса он фактически привязан к базе данных. Я могу подключиться из другого сеанса и увидеть вставленную строку. Я попытался обернуть запрос в транзакции и, похоже, преуспел, так как поведение не изменилось из запроса без явной транзакции.

Вот соответствующие детали:

Java Версия: 1.6.0_12-b04
Virtual Machine Version: 11.2-b01 (HotSpot Server)
Сервер Oracle: 10.2.0.4
Oracle Client: 11.1. 0.7.0 через ojdbc6.jar

Обновление: Я использую cfqueryparam - они называются связующими переменными в мире оракулов. Хотя это и решает ближайшую проблему, у нас есть довольно большая устаревшая кодовая база, которую мы не можем реалистично пройти через все, чтобы обновить запросы как часть обновления от CF7 до CF8.

Несмотря на то, что я столкнулся с одной конкретной ситуацией, которая терпит неудачу (и инкапсулировала ее в тесте mxunit), это не означает, что нет других областей, где это может быть проблемой. Мне бы очень хотелось иметь решение, которое устраняет ошибку OALL8, а не кодирование вокруг него.

Обновление 2: После проверки с нашим DBA он установил параметр CURSOR_SHARING в SIMILAR. Значение по умолчанию Oracle - EXACT. Что происходит, когда ColdFusion передает запрос на выполнение, Oracle поворачивает все литеральные значения для привязки переменных и, похоже, запутывает ColdFusion. Включение настройки в EXACT позволяет буквальным запросам работать нормально.

Обновление 3: Oracle, наконец, выпустила внеполосный патч для JDBC. Он был идентифицирован как ошибка JDBC. Последние драйверы должны включать его, когда они, наконец, обновляются. Если у вас есть поддержка, вы также можете запросить исправление через свою систему TAR.

ответ

8

Итак ... использовать переменные связывания?

Вы должны использовать их (через cfqueryparam) для обеспечения безопасности в любом случае, и если это решает проблему, это еще больше оснований для этого.


Если вы заинтересованы в том, что означает, что фактическая ошибка, Google имеет plentyofresults, предполагая, что это ошибка с драйвером JDBC, и даже предлагает patch is available.


Но я не вижу фактического вопроса в вашем посте ...?

+5

Похоже, эта страница является одним из 10 лучших результатов Google. –

0

Если приложение запустить в WebLogic, вы должны скопировать ojdbc.jar установить каталог "weblogic81 \ сервер \ Lib", охватывают один и тот же файл имя.

Смежные вопросы