- - PR -
OleDbConnectionの接続時間について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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へのセッションが切れることなくどんどん増えていく ことが予想されますが、このセッションはずっと残るものなのでしょうか? ・ページを閉じれば切れるのか? ・ある一定時間後に切れるのか?また、その場合どれ位の時間なのか? 等に関してご存知の方いらっしゃいましたら、よろしくご教授の ほど、お願いします。 | ||||||||||||
|
投稿日時: 2007-04-20 10:09
・ページを閉じてもコネクションは切れません。
どうでしょう。。。切れない気がする。。。 ところでなぜコネクションを閉じないのですか? _________________ かるあ のメモ と スニペット | ||||||||||||
|
投稿日時: 2007-04-20 10:19
かるあ様ご返答ありがとうございます。
いえ、コネクションを閉じるつもりでしたが、記入漏れで 実行してしまっただけです。 そこで、これってこのまま実行し続けたらどうなるんだろう? と思った次第です。 | ||||||||||||
|
投稿日時: 2007-04-23 22:28
自己レスで申し訳ありません。
こちらの件で非常に困っていますが、どなたかご存知の方 いらっしゃいますでしょうか? どうもワーカープロセスがORACLEとの接続をずっと保持 しているようです。 これはワーカープロセスが生存している限り続くのでしょうか? よろしくご教授のほど、お願いします。
| ||||||||||||
|
投稿日時: 2007-04-24 00:31
えっ困っているんですか?
とあったので、技術的興味だけなのかと思っていました。 記入漏れなら直せばいいと思うのですが。。。
できるかわからないけれど、とりあえずコネクションストリングをいろいろ変えて試してみてはどうでしょう。 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 ] | ||||||||||||
|
投稿日時: 2007-04-24 21:08
関連リンク:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=38071&forum=7&2 うろ覚えで書きます。 データベースと接続を開始するという処理はコストの高い処理なので、通常は接続プールというものが設けられ、使用しなくなった接続は、プールに入ります。 次に接続要求が来たとき、プールにある接続と、接続文字列が全く同じ場合、プールにあるものが割り当てられます。さらに同じ接続文字列で接続要求が来た場合は、プールにはもうないので、新しい接続が割り当てられます。 ここで、クライアント側では接続を切ったわけですが、サーバ側ではプールに入れられているため、接続されたままとなります。 このため、見方によってはいつまで経っても接続が閉じないという現象が発生します。つまり、サーバ側で見たときにいつまでも接続が残っているからといって、クライアントが本当に接続しているかどうかはわかりません。Oracle なら、プールにある接続かどうかもわかったように思います。 この、接続というアンマネージ リソースは、Close では接続プールにはいるわけですが、Dispose でも解放されないと思います。この段、未確認。 _________________ | ||||||||||||
|
投稿日時: 2007-04-26 10:36
Jitta様、かるあ様ご返答ありがとうございます。
色々と参考になりました。 ただの記述漏れで、ページを閉じた際にコネクションも 切れるのではないかと思っていましたが、影響度を調べれば 調べるほど、かなり甚大な影響を与えることが解ったので、 ただの記述漏れですまない状況でした。 やってみて解りましたが、この状態のWebページを連続して リクエストするだけで、ORACLEのDBがセッションフルの状況になり、 繋がらなくなります。 かるあ様が紹介してくれたページを見て色々試しましたが、 close処理を行わなくても、設定時間後に切れるようにする ようなことはできるのでしょうか? もし、ご存知の方いらっしゃいましたら、ご教授お願いします。 | ||||||||||||
|
投稿日時: 2007-04-26 10:43
>・ページを閉じれば切れるのか?
>・ある一定時間後に切れるのか?また、その場合どれ位の時間なのか? 僕の勝手な憶測なので、間違っていたらで申し訳ないのですが・・・ もしや、クライアントからのセッションが続いている間、データベースサーバーのコネクションは開いたままにという処理にしてはいないでしょうか? 仮にそうだとしたら、データベースにアクセスする都度にコネクションを開いて、使い終えたらすぐにコネクションを閉じるようしても問題はないですよ。 Jittaさんの仰るコネクションプーリングが有効に機能しますので。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog |