2009-03-24 8 views
8

Dans le cadre de la mise à niveau de JRun, nous passons d'une JVM de 1,4 à une JVM de 1,6. Maintenant, je reçois une erreur db de l'oracle vraiment étrange: "OALL8 est dans un état incohérent". J'ai épinglé le problème pour insérer des requêtes qui n'utilisent pas toutes les variables de liaison - tous les paramètres en ligne. Si j'exécute la requête sans aucune variable de liaison, j'obtiens l'erreur ci-dessus. Dès que je remplace l'une des valeurs codées en dur par une variable de rattachement, tout fonctionne sans erreur.Oracle: OALL8 est dans un état incohérent

L'autre bit étrange est qu'après l'exécution de la requête, il est en fait validé dans la base de données. Je peux me connecter à partir d'une autre session et voir la ligne insérée. J'ai essayé d'encapsuler la requête dans une transaction et il semble réussir car le comportement est inchangé de la requête sans transaction explicite.

Voici les détails pertinents:

Java Version: 1.6.0_12-B04
machine virtuelle Version: 11.2-B01 (HotSpot Server)
serveur Oracle: Oracle 10.2.0.4
Client: 11.1. 0.7.0 à ojdbc6.jar

Mise à jour: J'utilise cfqueryparam - elles sont appelées variables de liaison dans le monde des oracles. Bien que cela résout le problème immédiat, nous avons une base de code héritée plutôt importante que nous ne pouvons pas mettre à jour de manière réaliste pour mettre à jour les requêtes dans le cadre de la mise à niveau de CF7 vers CF8.

Même si j'ai identifié une situation spécifique qui échoue (et l'a encapsulée dans un test mxunit), cela ne signifie pas qu'il n'y a pas d'autres zones où cela pourrait poser problème. Je voudrais vraiment avoir une solution en place qui supprime l'erreur OALL8 plutôt que de coder autour d'elle. Après la vérification avec notre DBA, il avait mis un paramètre appelé CURSOR_SHARING à SIMILAR. La valeur par défaut d'Oracle est EXACT. Ce qui se passe est lorsque ColdFusion remet la requête à exécuter, Oracle transforme toutes les valeurs littérales en variables de liaison et cela semble être source de confusion pour ColdFusion. Le retour à EXACT permet aux requêtes littérales de fonctionner correctement.

Mise à jour 3: Oracle nous a finalement délivré un correctif hors bande pour JDBC. Il a été identifié comme une erreur JDBC. Les derniers pilotes devraient l'inclure quand ils sont finalement mis à jour. Si vous avez un support, vous pouvez également demander le correctif via leur système TAR.

Répondre

8

Alors ... utiliser des variables de liaison?

Vous devriez quand même les utiliser (via cfqueryparam) pour des raisons de sécurité, et si cela résout le problème c'est encore plus important.


Si vous êtes intéressé par ce que signifie l'erreur réelle, Google a plentyofresults, ce qui suggère que c'est une erreur avec le pilote JDBC et suggère même un patch is available.


Mais je ne vois pas de véritable question dans votre message ...?

+5

Ironiquement, cette page est l'un des 10 meilleurs résultats google. –

0

Si vous exécutez l'application dans weblogic, vous devez copier ojdbc.jar installer le répertoire "weblogic81 \ server \ lib", couvrir le même fichier nom.

Questions connexes