В рамках обновления 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.
Похоже, эта страница является одним из 10 лучших результатов Google. –