45

Oracle 10 データベース (継続的インテグレーション サーバーとして Hudson を使用) の前で Weblogic 9 に対して Junit 4 テスト スイートを実行していますが、スクリプトのティアダウン中に ORA-12519 クラッシュが発生することがあります。ただし、エラーは非常に断続的です。

  • 通常、同じ Test クラスで発生します
  • 同じテストケースで常に発生するとは限りません(合格する場合もあります)
  • 同じ数のテスト ケース (3 ~ 9 のどこでも) では発生しません。
  • まったく起こらないこともある、すべてが過ぎ去る

これがローカルで発生しないことを保証することはできませんが (もちろん、同じデータベースに対して実行する場合)、問題なく同じクラスのスイートを複数回実行しました。

何か案は?

4

5 に答える 5

42

これが全員の答えになるかどうかはわかりませんが、掘り下げた結果、ここにたどり着きました.

このエラーは明らかに、リスナーが接続を受け入れていないという事実によって引き起こされますが、他のテストでは問題なく接続できたのに、なぜそのエラーが発生するのでしょうか (sqlplus 経由でも問題なく接続できました)。問題の鍵は、接続できなかったことではなく、断続的だったことです。

いくつかの調査の結果、クラスのセットアップ中に作成された静的データがあり、テスト クラスの存続期間中は開いた接続を維持し、新しい接続を作成していることがわかりました。さて、このクラスが範囲外になったときにすべてのリソースが適切に解放されたとしても (もちろん、finally{} ブロックを介して)、実行中に、このクラスが利用可能なすべての接続を飲み込んでしまうケースがいくつかありました (わかりました、悪いです)。練習アラート - これは、プールを使用するのではなく、直接接続する単体テスト コードであるため、同じ問題が本番環境で発生することはありません)。

修正は、そのクラスを静的にしてクラスのセットアップで実行するのではなく、代わりにメソッドごとの setUp および tearDown メソッドで使用することでした。

したがって、自分のアプリでこのエラーが発生した場合は、その不良少年にプロファイラーを平手打ちし、接続リークがあるかどうかを確認してください。それが役立つことを願っています。

于 2008-10-15T23:34:19.983 に答える
33

同様のエラーに対して私が見つけた別の解決策ですが、同じエラーメッセージは、見つかったサービスハンドラーの数を増やすことです。(このエラーのインスタンスは、Weblogic Portal 接続プール内の接続が多すぎるために発生しました。)

  • として実行SQL*Plusし、ログインしますSYSTEM。Oracle DB XE のインストール中に使用したパスワードを知っておく必要があります。
  • alter system set processes=150 scope=spfile;SQL*Plus でコマンドを実行します。
  • 非常に重要: データベースを再起動してください。

ここから:

http://www.atpeaz.com/index.php/2010/fixing-the-ora-12519-tnsno-適切な-service-handler-found-error/

于 2012-03-05T04:58:38.633 に答える
4

私も同じ問題を抱えていました。多くの場所で答えを探しました。プロセス/サービスハンドラーの数を変更するために、同様の回答がたくさんありました。でも、元に戻すのを忘れたらどうしようと思いました。

次にThread.sleep()、それぞれの後にメソッドを使用してみましたconnection.close();

方法はわかりませんが、少なくとも私にとっては機能しています。

もしそれを試して、それがどのように機能するかを理解したい場合は、先に進んでください。私もプログラミング初心者なので教えていただきたいです。

于 2016-03-31T07:03:09.183 に答える
1

同様の問題がありました。データベース(Spring JDBC)テストのパックを実行するたびに発生したため、アプリケーションコンテキストをクリーンアップしてすべてのリソースを解放するために、各テストに注釈を付けSpringJUnit4ClassRunnerて問題を解決し、各テストを新しい初期化で実行できるようにしました@DirtiesContextアプリケーション コンテキスト。

于 2016-12-19T15:36:54.490 に答える