1

私はグーグルで成功していないという本当に奇妙な問題を抱えています。

DB、接続設定、コードなどを変更せずに発生し始めました。

問題は、サーブレットにアクセスするときに、EJB の 1 つが直接 SQL 呼び出しを行っていることです。これは非常に単純です。

"select \n" +
" value, \n" +
" other_value \n" +
" from \n" +
" some_table \n" +
" where some_condition = ? "

これは明らかに直接的な SQL ではありませんが、かなり近いものです。何らかの理由で、「ORA-00942: テーブルまたはビューが存在しません」というエラーが返されるようになりました。

テーブルが存在し、キッカーは、デバッガーをフックし、クエリ内のスペースまたはマイナーなもの (クエリ自体を変更しない) を変更し、変更をホットデプロイすると、正常に動作することです。これに出くわしたのはこれが初めてではありません。これは開発環境でのみ発生するようで (Q/A、サンドボックス、または本番環境ではまだ見たことがありません)、常に複製可能であるとは限らず、私は非常に気が狂います。

常に複製可能であるとは限らないということは、クリーンなビルドと再デプロイによって問題が解決される場合があることを意味しますが、常にではありません。常に同じテーブルであるとは限りません (ただし、エラーが発生した場合は、同じクエリが続行されます)。

フィーラーを投げて、誰かが以前にこのような問題に遭遇したことがあるかどうか、そしてそれを修正するために何を発見したかを確認してください.

4

1 に答える 1

1

JDBC プール内の 1 つの接続に問題があるように思えます。これは、断続的な性質を説明する可能性があり、後で同じ接続を使用してしまう可能性があるため、再デプロイするだけで問題が解決する場合があります。おそらく、再デプロイする代わりに接続プールをリセットしてみてください。( java weblogic.Admin -url t3://<server_url> RESET_POOL <pool_name>、と思います)

スキーマは 1 つしかないと言いましたが、それはスキーマが 1 つだけ存在するということですか、それともすべてのテーブルが 1 つのスキーマの下にあるということですか? どこかで実行している可能性はありますか?ALTER SESSION SET CURRENT_SCHEMA発行された接続がプールに返され、後でクエリにランダムに使用されると、メインスキーマには何も表示されなくなりますか? これは、Java 側だけでなくパッケージまたはトリガーでも発生する可能性があり、例外後に元に戻されない「一時的な」変更である可能性があります。開発環境にのみ存在する可能性のあるもののようにも聞こえます...

于 2010-04-08T08:41:08.940 に答える