Oracle: OALL8 находится в несовместимом состоянии - PullRequest
8 голосов
/ 25 марта 2009

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

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

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

Java версия: 1.6.0_12-b04
Версия виртуальной машины: 11.2-b01 (сервер HotSpot)
Сервер Oracle: 10.2.0.4
Клиент Oracle: с 11.1.0.7.0 по ojdbc6.jar

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 25 марта 2009

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

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


Если вас интересует, что означает настоящая ошибка, у Google есть множество из результатов , что указывает на ошибку с драйвером JDBC и даже предлагает доступно исправление .


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

1 голос
/ 24 августа 2010
0 голосов
/ 06 августа 2013

Если ваше приложение запущено в weblogic, вам следует скопировать ojdbc.jar, чтобы установить каталог «weblogic81 \ server \ lib», с тем же именем файла.

...