2009-03-24 44 views
8

JRunのアップグレードの一環として、1.4 JVMから1.6 JVMに移行しています。今、私は本当に奇妙なオラクルのdbエラーを取得しています: "OALL8は矛盾した状態です"。私はバインド変数をまったく使用しないクエリ(すべてのインライン・パラメータ)を挿入するためにこの問題を解決しました。バインド変数なしでクエリを実行すると、上記のエラーが発生します。ハードコードされた値の1つをバインド変数に置き換えると、すべてがエラーなく動作します。Oracle:OALL8が矛盾した状態にあります

もう1つの奇妙なビットは、クエリの実行後、実際にはデータベースにコミットされていることです。私は別のセッションから接続し、挿入された行を見ることができます。私はトランザクション内でクエリをラップしようとしましたが、明示的なトランザクションなしでクエリの動作が変更されていないため、成功すると思われます。

Javaバージョン:1.6.0_12-B04
仮想マシンのバージョン:11.2-B01(ホットスポットサーバー)
Oracleサーバ:10.2.0.4
Oracleクライアント:11.1ここ

は、関連する詳細です。 0.7.0からojdbc6.jar

更新:私はcfqueryparamを使用しています。これは、Oracleの世界でバインド変数と呼ばれています。それはすぐに問題を解決しますが、CF7からCF8へのアップグレードの一環としてクエリーを更新することは現実的には不可能な、かなり大きなレガシーコードベースを持っています。

私は特定の状況を特定して失敗します(そして、mxunitテストでカプセル化しました)が、これが問題の可能性がある他の領域がないことを意味するわけではありません。私は実際にOALL8エラーを回避するソリューションを用意したいと思います。

更新2:私たちのDBAに確認した後、彼はCURSOR_SHARINGというパラメータをSIMILARに設定しました。 OracleのデフォルトはEXACTです。何が起きているのかは、ColdFusionがクエリを実行して実行すると、すべてのリテラル値がバインド変数に変換され、ColdFusionが混乱するように見えます。設定をEXACTに戻すと、リテラルクエリはうまく動作します。

アップデート3: Oracleは最終的に私たちにJDBC用の帯域外パッチを発行しました。これはJDBCエラーとして識別されました。最新のドライバは、最終的に更新されるときにそれを含める必要があります。サポートがあれば、TARシステムを通じてパッチを要求することもできます。

答えて

8

だから...バインド変数を使用しますか?セキュリティのために(cfqueryparam経由)あなたがそれらを使用する必要があります

とにかく、それはそうするさらに多くの理由があります問題を解決するかどうか。


あなたは、実際のエラーが何を意味するのかに興味があるなら、GoogleはJDBCドライバとのエラーだ、とさえpatch is availableを示唆していることを示唆し、plentyofresultsを持っています。


しかし、私はあなたのポストの実際の質問が表示されませんか...?

+5

皮肉なことにこのページはトップ10のGoogleの結果の1つです。 –

0

を見つけました。

関連する問題