- PR -

ODP.NET Connectionに関して

投稿者投稿内容
GOOOP
ベテラン
会議室デビュー日: 2006/04/01
投稿数: 52
投稿日時: 2006-06-16 23:26
VS2005でVB・ODP.NETを使用し、DBへの接続を試みておりますが、
closeを掛けたのに、OracleにIavtiveのセッションが残ってしまいます。
これを避ける方法はないのでしょうか?

ご存知の方、教えていただけないでしょうか?

<SOURCE>

'Oracleへのコネクションの確立
cnn.ConnectionString = _
"User Id=scott; Password=tiger; Data Source=ora10g"
cnn.Open()

'〜 データアクセスのコードを記述 〜

'コネクションを閉じる
cnn.Close()
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-06-17 00:11
引用:

拳さんの書き込み (2006-06-16 23:26) より:
VS2005でVB・ODP.NETを使用し、DBへの接続を試みておりますが、
closeを掛けたのに、OracleにIavtiveのセッションが残ってしまいます。
これを避ける方法はないのでしょうか?


コネクションプーリングが有効になってるんじゃないですか?
どうしても接続を完全にクローズしたいのなら無効にすればいいと思います、多分。
その必要があるのかは別途考慮したほうがいいかもしれませんが。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-06-17 01:25
ODP.NET では Close() してもセッションが即時開放されません
Dispose() を呼び出すようにしてください

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=31217&forum=7&start=16
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-06-17 01:51
引用:

かるあさんの書き込み (2006-06-17 01:25) より:
ODP.NET では Close() してもセッションが即時開放されません
Dispose() を呼び出すようにしてください

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=31217&forum=7&start=16


これってわりと昔のバージョンの話じゃないですかね?
といいつつ元質問者の方がどのバージョン使ってるか分からないんで、
確かに可能性はありますね。
※確認はして無いんでもしかしたら最近のものでもそうなのかもしれませんが…
GOOOP
ベテラン
会議室デビュー日: 2006/04/01
投稿数: 52
投稿日時: 2006-06-17 22:50
皆様ありがとうございます。

環境を記述するのを忘れておりました。。。
DB:Oracle 10g エンタープライズサーバ
IDE:Visual Studio 2005 Express Edition
言語:Visual Basic
.NetFrameWork Version:2.0

コネクションプーリングの件ですが、
ConnectionString部分に"Pooling=false"とすればよいということでしょうか?

またDispose()メソッドですが、
記述してもSessionは残ったままの状態でした。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2006-06-18 00:44
1000回OpenとCloseを繰り返してOracleにセッションが1000個できるのなら問題ですが…。
そうじゃなくて,一定の数で止まるのなら問題無いんじゃないですかね〜?
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-06-18 04:02
引用:

拳さんの書き込み (2006-06-17 22:50) より:

環境を記述するのを忘れておりました。。。

コネクションプーリングの件ですが、
ConnectionString部分に"Pooling=false"とすればよいということでしょうか?


大事なのはOracleServerよりも ODP.NET のバージョンだったりして

引用:

コネクションプーリングの件ですが、
ConnectionString部分に"Pooling=false"とすればよいということでしょうか?


コネクションが残るってそういうことか・・・
上記で確かにプーリングは使用されないようになるとおもます。

ただ、本当にプーリングをオフにする必要があるのでしょうか
OTN にコネクション関連のドキュメントもあるとおもいますが
Connection Lifetime や Incr Pool Size などを適切に設定してあげると
コネクションが足りなくなったりすることもないとおもいますが
GOOOP
ベテラン
会議室デビュー日: 2006/04/01
投稿数: 52
投稿日時: 2006-06-18 10:07
なちゃ様、かるあ様 度々有難うございます。

>1000回OpenとCloseを繰り返してOracleにセッションが1000個できるのなら問題ですが…。
>そうじゃなくて,一定の数で止まるのなら問題無いんじゃないですかね〜?

プーリングの機能というのが文献を読んでもいまいちピンとこないのですが、
クラサバシステムでユーザ単位プーリングの設定をする場合です。

ボタンクリック時に
DBの接続開放部分を1つのサブプロシージャ内で完結する(変数も全てローカルで)
処理があった場合、処理終了後にはやはりSessionは残っていて
そのクラサバシステムのexeを終了した時点で、Sessionが消えるようです。

ボタンクリック時処理が終了した時点ではSession情報はサーバ側で持っているという
認識でいいのでしょうか?





あと、OracleのSession情報を見てみると意外と同様の事が原因で
Inactive状態のSessionが残っております。それが気持ち悪い というか残しといていいものかと思ってしまいまして。。。

また、サーバで定義する、Session数のMax数を
Inacviveのセッションでほとんど埋め尽くされたりいずれいないかと
危惧する部分もあります。

上記2点に関してアドバイス頂けないでしょうか?

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