- - PR -
DB接続エラーを繰り返すと接続できなくなる
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-04-12 14:51
すいません。勘違いでした。やはり不具合があります。
現状を整理すると、 @ LANケーブルを抜く A 接続エラーとなる 一度目はコネクションのOPENは成功、コマンド発行でエラーとなる。 二度目以降はコネクションのOPENでエラーとなる。 B Aを5分間繰り返す C LANケーブルを挿す D 1〜2分ほど接続エラーを繰り返す E 接続できるようになる。 Dの時間はBの時間に影響されているようです。 Pooling=false を指定した場合は、Dの状態にはなりません。 Connection Lifetime を短く設定してみましたが、駄目なようです。 回避策はあるのでしょうか? | ||||
|
投稿日時: 2005-04-12 15:32
コネクションプーリングについては理解されましたか?
プーリングされている接続を強制的に削除することはできなそうなので OPENに失敗したら、その接続を一度Closeして、OPENが成功するまでリトライするってのはどうですか? プールの最大数分リトライしてダメなら異常終了って感じです。 そもそも、たしろう様のプロジェクトにおいてDBの再起動、LANケーブルが抜かれるって状況は、頻繁に発生するのでしょうか? | ||||
|
投稿日時: 2005-04-13 13:34
>burton999様
コネクションプーリングについては理解したつもりです。 リトライも試してみたのですが、駄目でした(しばらくすると復旧)。 運用上、DBサーバの再起動はあります。 LANケーブルが抜けることは基本的にないと思いますが。 まだ模索中です。 For Idx = 0 to 100 Try Conn.Open Exit For Catch ex As Exception Conn.Close If Idx = 100 Then Throw ex End If End Try Next Idx | ||||
|
投稿日時: 2005-04-13 13:49
Max Pool Sizeを1や5に設定してみても結果は同じでした。
ご参考までに。 | ||||
|
投稿日時: 2005-04-13 14:14
ケーブルを抜いている間(上記だと5分)はいくらリトライしても無駄だと思われますが そのへんの処理はどうなっているのでしょうか? 実際の運用でも5秒毎にDBを監視して、DBの再起動には何分かかるか分からないんですよね? DBを再起動する際は、監視するサービスも停止するっていう運用ルールが自然な気もします。 | ||||
|
投稿日時: 2005-04-13 14:48
ケーブルを抜いた場合も同様のロジックを通ります(100回コネクトし失敗する)。
やはり、運用で逃げるしかないですかね。もう少し検討してみます。 ご協力、ありがとうございました。 | ||||
|
投稿日時: 2005-04-13 20:36
南部です。
接続文字列を ・正常時に使用するプーリングする接続文字列 ・異常時に使用するプーリングしない接続文字列 の2つ用意してはどうでしょう。 エラーが発生したら(11と17だったかな?) 接続文字列をプーリングしないほうに切り替え、 接続できたらプーリングするほうに戻す。 でいけそうですが、試していません。 ダメだったらごめんなさい。 | ||||
|
投稿日時: 2005-04-14 08:39
このとき、前にエラーが出たヤツにまた当たったらややこしいことになりそうですね。 |