Oracle: OALL8 находится в несовместимом состоянии

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

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

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

Версия Java: 1.6.0_12-b04
Версия виртуальной машины: 11.2-b01 (сервер HotSpot)
Oracle Server: 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 ответа

Решение

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

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


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


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

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

Другие вопросы по тегам