1. ホーム
  2. oracle

[解決済み] ORA-12519 (TNS: no appropriate handler found) エラーが断続的に発生する原因について

2022-02-24 13:49:21

質問内容

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

  • 通常、同じTestクラスで発生する
  • 同じテストケースで必ず起こるとは限らない(パスする場合もある)
  • 同じ数のテストケースで発生しない(3~9個まで)。
  • 全く発生せず、すべて合格することもある

ローカルでこのようなことが起こらないとは断言できませんが(もちろん同じデータベースに対して実行した場合)、同じクラスのスイートを複数回実行しても問題はありません。

何か思い当たることはありますか?

解決方法は?

これがみんなの答えになるかどうかはわからないが、いろいろ調べた結果、以下のようなことがわかった。

このエラーは明らかにリスナーが接続を受け付けなかったことが原因ですが、他のテストでは問題なく接続できる(sqlplusでも問題なく接続できる)のに、なぜこのようなエラーが発生するのでしょうか? 問題の鍵は、接続できないことではなく、それが 断続的

いくつかの調査の後、クラスのセットアップ中に作成された静的データがあり、テストクラスの存続のためにオープンな接続を維持し、その都度新しい接続を作成することがわかりました。 このクラスがスコープ外に出たときにすべてのリソースが適切に解放されたにもかかわらず (もちろん finally{} ブロックによって)、実行中にこのクラスがすべての利用可能な接続を飲み込んでしまうケースがありました (OK, 悪い習慣警告 - これはプールを使用せずに直接接続するユニットテストコードだったので、同じ問題は本番環境で起こりえませんでした)。

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

もし、自分のアプリでこのエラーが発生したら、その不良品にプロファイラを適用して、接続リークがあるかどうか確認してください。 お役に立てれば幸いです。