2009-03-24 6 views
8

Como parte de la actualización de JRun, pasamos de una JVM 1.4 a una JVM 1.6. Ahora obtengo un error de oráculo db realmente extraño: "OALL8 está en un estado incoherente". He definido el problema para insertar consultas que no usan variables de vinculación: todos los parámetros en línea. Si ejecuto la consulta sin variables de vinculación, obtengo el error anterior. Tan pronto como reemplazo uno de los valores codificados con una variable de vinculación, todo funciona sin error.Oracle: OALL8 está en un estado incoherente

El otro bit extraño es que después de ejecutar la consulta, de hecho está comprometida con la base de datos. Puedo conectarme desde otra sesión y ver la fila insertada. He intentado ajustar la consulta en una transacción y parece tener éxito ya que el comportamiento no se modifica desde la consulta sin una transacción explícita.

Éstos son los detalles relevantes:

la versión de Java 1.6.0_12-B04:
Virtual Machine Versión: 11.2-b01 (HotSpot Server)
servidor Oracle: 10.2.0.4
cliente de Oracle: 11.1. 0.7.0 a través de ojdbc6.jar

Actualización: Estoy usando cfqueryparam - se llaman variables de vinculación en el mundo de Oracle. Si bien eso resuelve el problema inmediato, tenemos una base de código heredada bastante grande que no podemos revisar de manera realista para actualizar las consultas como parte de la actualización de CF7 a CF8.

Aunque he definido una situación específica que falla (y la encapsulé en una prueba de mxunit), eso no significa que no haya otras áreas donde esto pueda ser un problema. Realmente me gustaría tener una solución que elimine el error OALL8 en lugar de codificarlo.

Actualización 2: Después de consultar con nuestro DBA había establecido un parámetro llamado CURSOR_SHARING en SIMILAR. El valor predeterminado de Oracle es EXACTO. Lo que sucede es que cuando ColdFusion entrega la consulta para que se ejecute, Oracle está convirtiendo todos los valores literales para vincular variables y eso parece confundir a ColdFusion. Al volver la configuración a EXACT, permite que las consultas literales funcionen correctamente.

Actualización 3: Oracle finalmente nos envió un parche fuera de banda para JDBC. Fue identificado como un error JDBC. Los últimos controladores deberían incluirlo cuando finalmente se actualicen. Si tiene soporte, también puede solicitar el parche a través de su sistema TAR.

Respuesta

8

Entonces ... ¿usar variables de vinculación?

Debe utilizarlos (a través de cfqueryparam) para la seguridad de todos modos, y si resuelve el problema, esa es una razón más para hacerlo.


Si usted está interesado en lo que significa el error real, Google tiene plentyofresults, lo que sugiere que se trata de un error con el controlador JDBC, e incluso sugiere un patch is available.


¿Pero no veo una pregunta real en su publicación ...?

+5

Irónicamente, esta página es una de las 10 mejores resultados de google. –

0

Si ejecución de la aplicación en WebLogic, debe copiar ojdbc.jar instalar directorio "weblogic81 \ servidor \ lib", cubrir el mismo nombre de archivo.

Cuestiones relacionadas