- PR -

OleDbConnectionの接続時間について

投稿者投稿内容
ターキッシュ
大ベテラン
会議室デビュー日: 2003/01/15
投稿数: 126
投稿日時: 2007-04-20 09:31
いつも勉強させて頂いております。

現在、ASP.NETでDB(Oracle9i)のデータを画面に表示する
ページを作成中です。

OleDbDataReader myReader

SQLCon = new OleDbConnection();
SQLCon.ConnectionString = DBへの接続文字列;
SQLCon.Open();
OleDbCommand sqlCmd = SQLCon.CreateCommand();
sqlCmd.CommandText = SQL文 ;
myReader =sqlCmd.ExecuteReader(CommandBehavior.CloseConnection)

のように、OleDbDataReaderにデータを取得し、表示に
使用しています。
この処理自体は何の問題も無く、稼動しているのですが、
この後に、通常であれば、

SQLCon.Close();
myReader.Close();

と記述すべきところを、未記入のまま実行させてしまいました。

この場合、DBへのセッションが切れることなくどんどん増えていく
ことが予想されますが、このセッションはずっと残るものなのでしょうか?

・ページを閉じれば切れるのか?
・ある一定時間後に切れるのか?また、その場合どれ位の時間なのか?

等に関してご存知の方いらっしゃいましたら、よろしくご教授の
ほど、お願いします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-04-20 10:09
引用:

ターキッシュさんの書き込み (2007-04-20 09:31) より:

・ページを閉じれば切れるのか?


・ページを閉じてもコネクションは切れません。

引用:

ターキッシュさんの書き込み (2007-04-20 09:31) より:

・ある一定時間後に切れるのか?また、その場合どれ位の時間なのか?


どうでしょう。。。切れない気がする。。。

ところでなぜコネクションを閉じないのですか?
_________________
かるあ のメモスニペット
ターキッシュ
大ベテラン
会議室デビュー日: 2003/01/15
投稿数: 126
投稿日時: 2007-04-20 10:19
かるあ様ご返答ありがとうございます。

引用:

・ページを閉じてもコネクションは切れません。

ところでなぜコネクションを閉じないのですか?




いえ、コネクションを閉じるつもりでしたが、記入漏れで
実行してしまっただけです。
そこで、これってこのまま実行し続けたらどうなるんだろう?
と思った次第です。
ターキッシュ
大ベテラン
会議室デビュー日: 2003/01/15
投稿数: 126
投稿日時: 2007-04-23 22:28
自己レスで申し訳ありません。
こちらの件で非常に困っていますが、どなたかご存知の方
いらっしゃいますでしょうか?

どうもワーカープロセスがORACLEとの接続をずっと保持
しているようです。
これはワーカープロセスが生存している限り続くのでしょうか?

よろしくご教授のほど、お願いします。


引用:

ターキッシュさんの書き込み (2007-04-20 10:19) より:
かるあ様ご返答ありがとうございます。

引用:

・ページを閉じてもコネクションは切れません。

ところでなぜコネクションを閉じないのですか?




いえ、コネクションを閉じるつもりでしたが、記入漏れで
実行してしまっただけです。
そこで、これってこのまま実行し続けたらどうなるんだろう?
と思った次第です。


かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-04-24 00:31
引用:

ターキッシュさんの書き込み (2007-04-23 22:28) より:

こちらの件で非常に困っていますが、どなたかご存知の方
いらっしゃいますでしょうか?


えっ困っているんですか?

引用:

ターキッシュさんの書き込み (2007-04-20 10:19) より:

いえ、コネクションを閉じるつもりでしたが、記入漏れで
実行してしまっただけです。
そこで、これってこのまま実行し続けたらどうなるんだろう?
と思った次第です。


とあったので、技術的興味だけなのかと思っていました。
記入漏れなら直せばいいと思うのですが。。。

引用:

ターキッシュさんの書き込み (2007-04-23 22:28) より:

どうもワーカープロセスがORACLEとの接続をずっと保持
しているようです。
これはワーカープロセスが生存している限り続くのでしょうか?


できるかわからないけれど、とりあえずコネクションストリングをいろいろ変えて試してみてはどうでしょう。
http://otndnld.oracle.co.jp/document/products/oracle10g/102/windows/B31247-01/OracleConnectionClass.htm#DAFFIIFH

_________________
かるあ のメモ
http://karua.at.webry.info/

[ メッセージ編集済み 編集者: かるあ 編集日時 2007-04-24 00:32 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-24 21:08
関連リンク:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=38071&forum=7&2

 うろ覚えで書きます。

 データベースと接続を開始するという処理はコストの高い処理なので、通常は接続プールというものが設けられ、使用しなくなった接続は、プールに入ります。
 次に接続要求が来たとき、プールにある接続と、接続文字列が全く同じ場合、プールにあるものが割り当てられます。さらに同じ接続文字列で接続要求が来た場合は、プールにはもうないので、新しい接続が割り当てられます。
 ここで、クライアント側では接続を切ったわけですが、サーバ側ではプールに入れられているため、接続されたままとなります。
 このため、見方によってはいつまで経っても接続が閉じないという現象が発生します。つまり、サーバ側で見たときにいつまでも接続が残っているからといって、クライアントが本当に接続しているかどうかはわかりません。Oracle なら、プールにある接続かどうかもわかったように思います。

 この、接続というアンマネージ リソースは、Close では接続プールにはいるわけですが、Dispose でも解放されないと思います。この段、未確認。
_________________
ターキッシュ
大ベテラン
会議室デビュー日: 2003/01/15
投稿数: 126
投稿日時: 2007-04-26 10:36
Jitta様、かるあ様ご返答ありがとうございます。

色々と参考になりました。
ただの記述漏れで、ページを閉じた際にコネクションも
切れるのではないかと思っていましたが、影響度を調べれば
調べるほど、かなり甚大な影響を与えることが解ったので、
ただの記述漏れですまない状況でした。

やってみて解りましたが、この状態のWebページを連続して
リクエストするだけで、ORACLEのDBがセッションフルの状況になり、
繋がらなくなります。

かるあ様が紹介してくれたページを見て色々試しましたが、
close処理を行わなくても、設定時間後に切れるようにする
ようなことはできるのでしょうか?

もし、ご存知の方いらっしゃいましたら、ご教授お願いします。


R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2007-04-26 10:43
>・ページを閉じれば切れるのか?
>・ある一定時間後に切れるのか?また、その場合どれ位の時間なのか?

僕の勝手な憶測なので、間違っていたらで申し訳ないのですが・・・

もしや、クライアントからのセッションが続いている間、データベースサーバーのコネクションは開いたままにという処理にしてはいないでしょうか?

仮にそうだとしたら、データベースにアクセスする都度にコネクションを開いて、使い終えたらすぐにコネクションを閉じるようしても問題はないですよ。

Jittaさんの仰るコネクションプーリングが有効に機能しますので。


_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog

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