- PR -

オラクルのコネクションが残ってしまう

投稿者投稿内容
おきくあきー
会議室デビュー日: 2004/01/08
投稿数: 5
投稿日時: 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


一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-01-08 14:54
セッションが切れていますでしょうか。
つまり、そのソースの部分が確かに実行されていることを確認してみてください。

あと、開きっぱなしって、あまりやらないと思うんですが・・・。
DB周りはあまり良く分からないのですが、コネクションがプールされるというならなおさら、プログラムでは一回ごとにきちんとクローズするべきだと思います。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2004-01-08 14:59
引用:

おきくあきーさんの書き込み (2004-01-08 14:43) より:
ASPのセッション開始時に、ORACLEとコネクションを張って、
そのコネクションをセッション変数に格納して使いまわし、


 そもそもこれがおかしいでしょう。
コネクションプーリングを行い、
DBのコネクションは1リクエストごとにコネクションプールから取得し、
処理が終了したらコネクションプールにコネクションを返却すべきですね。
HTTPがステートレスな通信なのに、
DBのコネクションだけ常に接続されているのは,
おかしいと思いませんかね・・・。

 私は.NETは未経験というかMS系は殆ど知らないので、
これぐらいしか回答できませんが。
おきくあきー
会議室デビュー日: 2004/01/08
投稿数: 5
投稿日時: 2004-01-08 15:10
早速のレスありがとうございます。

@コネクションを切るコードの部分を通っているかについて
  →デバックしてみましたが、通っており、その後コネクションのstate
を見てもcloseになっています

Aコネクションの使いまわしについて
  →ご指摘の通り、普通は絶対にこんなことやらないと思います。
   アプリをつくり始めた段階では接続プールの存在をしらず、
   コネクションをつなぎっぱなしにしてパフォーマンスをあげる
   目的でこのようにしたようです。

   やはりやり方を変えるしかないのですかね・・・

ちなみに、
   接続POOLの無効化は、接続文字列の部分に
「 Pooling = false; 」
   として、試しましたが、効果がありませんでした。

   


おきくあきー
会議室デビュー日: 2004/01/08
投稿数: 5
投稿日時: 2004-01-09 10:04
皆様
ありがとうございました。

結局、DBとの接続を考え直すこととなりました。

アドバイスありがとうございました。
それにしても、.NET − SQLサーバ間と同じくらいの接続パフォーマンス
だと助かるんですけどね。
(接続プールがあるからよいのでしょうが・・・)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-09 12:13
sqlnet.oraのパラメータ
SQLNET.AUTHENTICATION_SERVICES= (NONE)

当然やっていますよね?
(Windows統合認証を使わない場合)

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-01-09 12:14 ]
おきくあきー
会議室デビュー日: 2004/01/08
投稿数: 5
投稿日時: 2004-01-13 18:16
Jittaさんからご指摘いただいた

>sqlnet.oraのパラメータ
>SQLNET.AUTHENTICATION_SERVICES= (NONE)

以上のパラメータを設定してORACLEを再起動しましたがそれでもだめでした。
さらに、

SQLNET.ORAにSQLNET.EXPIRE_TIME=1 

も設定してみましたがだめでした・・・

はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-01-13 18:24
はにまるです。

的外れかもしれませんが、
PL/SQLを利用している場合、カーソルを閉じずにプログラムを終了すると
カーソルがオープン状態なままメモリに残る問題があります。

もしかすると、Session情報も残るのかもしれません。

スキルアップ/キャリアアップ(JOB@IT)