- - PR -
WeblogicとDBの接続が切れてしまう。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-09-20 22:10
不思議な現象が起こり、原因が特定できないのですが、どなたかご存知の方はいらっしゃらないでしょうか?
環境 RedHat Enterprise Linux ES V3 Weblogic Server 8.1J SP4 フレームワーク springframework struts 現象は、この3ヶ月で2回発生したのですが・・・以下のエラーが発生します。 「<ExecuteThread: '22' for queue: 'weblogic.kernel.Default'> <<WLS Kernel>> <> <BEA-101017> org.springframework.transaction.TransactionSystemException: Could not roll back JDBC transaction; nested exception is java.sql.SQLException: クローズされた接続です。」 前日は何事も無く使用できていたのに、次の日いきなり発生しました。 DBは起動しており、接続が切れた原因が想像つかないのです。 頻度は月に1回ぐらいの間隔です。 何かご存知の方は御教授お願いします。 | ||||
|
投稿日時: 2005-09-20 22:38
メッセージのまま受け取ると、Connection.close() を呼び出した後に Connection.rollback() を呼び出している印象を受けます。
DB との接続が切れているのか、コネクションプールがクローズされてプールに戻っているために出ているエラーなのか切り分けてみてはいかがでしょうか。 単に close()/rollback() を呼び出して同じ例外が記録されるのであれば、Connetion.close() を呼び出すタイミングがおかしい、つまりアプリケーションレベルの問題ではないかと考えられます。 | ||||
|
投稿日時: 2005-09-21 16:28
>メッセージのまま受け取ると、Connection.close() を呼び出した後にConnection.rollback() を呼び出している印象を受けます。
確かにそのように感じます。Connectionはspringframeworkに全て頼っていたので、環境の設定がまずいのかと調べてました。ちょっとアプリケーションを確認してみます。 | ||||
|
投稿日時: 2005-09-21 16:38
ごめんなさい。
確認だけさせてください。 前日から当日の間までにDBを外部から接続できない状態にはしていないんですよね? #月1の頻度ってあたりから、DBの運用が絡んだ可能性が?と思えたので。 | ||||
|
投稿日時: 2005-09-21 17:55
>前日から当日の間までにDBを外部から接続できない状態にはしていないんですよね?
DBはシステムからしか使用してなく、外部より触ることもないので「外部から接続できない状態」になっていることは無いはずです。 あと思ったことはエラーの内容は、接続が切れて→Exceptionが発生→springframeworkがrollback→Exception発生となっているのかも?しれない。 | ||||
|
投稿日時: 2005-09-21 18:02
「外部から」って表現がまずかったですね。 DBから見た外部なので、まほさんが関わっている、 システムアプリケーションも外部としてます。 DB運用として再編成を実行するために、 誰もアクセスできない状態にした等がなければと思ったまでです。 Weblogicではなかったのですが、 DBの再起動を行ったのに、ConnectionPoolingを再構築しないままとしていると 似たようなエラーが出た経験があったので、確認させていただきました。 | ||||
|
投稿日時: 2005-09-27 15:55
忙しくて一週間書き込めずにすみません。
DBのログを見る機会がありまして、再現させてはいないのですが、現象が発生した日時と照らし合わせると「redoログファイル」の切り替えの時に接続が切れているようです。 Oracleを全然知らなくて、原因不明と言ってましてすみません。 weblogicの設定で接続の修復を行うように対応していますが、やはり「なぜ?発生するのか」理由がわかりません? 現象を再現させたりして自分で調べてみますが、ご存知の方がいらっしゃったら御教授お願いします。 | ||||
|
投稿日時: 2005-09-27 16:37
再現性が低い現象について事例を知りたいのであれば Oracle なり WebLogic なりのサポート窓口に問い合わせるのが手っ取り早いのではないでしょうか。せっかく安くない保守料金を支払っているんですから活用しないともったいないです。
一定のタイミングで発生することがわかって、それが Oracle 的にも WebLogic 的にも期待される動作ならば一時的にコネクションプールのサスペンドをしておくのも良いかもしれません。 http://edocs.beasys.co.jp/e-docs/wls/docs81/jdbc/programming.html#suspend それより手前の Web サーバかファイアウォールで遮断して WebLogic にリクエストが届かないようにするのも良いかもしれません。 |
1