- - PR -
オラクルのコネクションが残ってしまう
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-01-08 14:43
ASP.NET(VB.NET) + ORACLEのWEBアプリでコネクションが切れなくて困っています。
ASPのセッション開始時に、ORACLEとコネクションを張って、そのコネクションを セッション変数に格納して使いまわし、セッション終了時に SESSION("ORA_CON").CLOSE SESSION("ORA_CON").DISPOSE SESSION("ORA_CON") = NOTHING とやっているんですが、 SQL*PLUS で v$session ビューを見ると いつまでたってもコネクションが残ったままです。(statusはinactive) 接続プールがあるにしても、一日以上もなくならず、IISの再起動をしないと なくなりません。 開放の仕方が間違っているのでしょうか? *************************************** WEB サーバ W2K SERVER SP3 IIS5.0 .NET FRAMEWORK 1.1 ASPからDBへの接続:ODP.NET (ORACLE社のサイトからダウンロード) DB サーバ ORACLE8.0.5 | ||||
|
投稿日時: 2004-01-08 14:54
セッションが切れていますでしょうか。
つまり、そのソースの部分が確かに実行されていることを確認してみてください。 あと、開きっぱなしって、あまりやらないと思うんですが・・・。 DB周りはあまり良く分からないのですが、コネクションがプールされるというならなおさら、プログラムでは一回ごとにきちんとクローズするべきだと思います。 | ||||
|
投稿日時: 2004-01-08 14:59
そもそもこれがおかしいでしょう。 コネクションプーリングを行い、 DBのコネクションは1リクエストごとにコネクションプールから取得し、 処理が終了したらコネクションプールにコネクションを返却すべきですね。 HTTPがステートレスな通信なのに、 DBのコネクションだけ常に接続されているのは, おかしいと思いませんかね・・・。 ![]() 私は.NETは未経験というかMS系は殆ど知らないので、 これぐらいしか回答できませんが。 ![]() | ||||
|
投稿日時: 2004-01-08 15:10
早速のレスありがとうございます。
@コネクションを切るコードの部分を通っているかについて →デバックしてみましたが、通っており、その後コネクションのstate を見てもcloseになっています Aコネクションの使いまわしについて →ご指摘の通り、普通は絶対にこんなことやらないと思います。 アプリをつくり始めた段階では接続プールの存在をしらず、 コネクションをつなぎっぱなしにしてパフォーマンスをあげる 目的でこのようにしたようです。 やはりやり方を変えるしかないのですかね・・・ ちなみに、 接続POOLの無効化は、接続文字列の部分に 「 Pooling = false; 」 として、試しましたが、効果がありませんでした。 | ||||
|
投稿日時: 2004-01-09 10:04
皆様
ありがとうございました。 結局、DBとの接続を考え直すこととなりました。 アドバイスありがとうございました。 それにしても、.NET − SQLサーバ間と同じくらいの接続パフォーマンス だと助かるんですけどね。 (接続プールがあるからよいのでしょうが・・・) | ||||
|
投稿日時: 2004-01-09 12:13
sqlnet.oraのパラメータ
SQLNET.AUTHENTICATION_SERVICES= (NONE) 当然やっていますよね? (Windows統合認証を使わない場合) [ メッセージ編集済み 編集者: Jitta 編集日時 2004-01-09 12:14 ] | ||||
|
投稿日時: 2004-01-13 18:16
Jittaさんからご指摘いただいた
>sqlnet.oraのパラメータ >SQLNET.AUTHENTICATION_SERVICES= (NONE) 以上のパラメータを設定してORACLEを再起動しましたがそれでもだめでした。 さらに、 SQLNET.ORAにSQLNET.EXPIRE_TIME=1 も設定してみましたがだめでした・・・ | ||||
|
投稿日時: 2004-01-13 18:24
はにまるです。
的外れかもしれませんが、 PL/SQLを利用している場合、カーソルを閉じずにプログラムを終了すると カーソルがオープン状態なままメモリに残る問題があります。 もしかすると、Session情報も残るのかもしれません。 |