- PR -

DB接続エラーを繰り返すと接続できなくなる

投稿者投稿内容
たしろう
会議室デビュー日: 2004/05/25
投稿数: 10
投稿日時: 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 を短く設定してみましたが、駄目なようです。

回避策はあるのでしょうか?
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-04-12 15:32
コネクションプーリングについては理解されましたか?
プーリングされている接続を強制的に削除することはできなそうなので
OPENに失敗したら、その接続を一度Closeして、OPENが成功するまでリトライするってのはどうですか?
プールの最大数分リトライしてダメなら異常終了って感じです。
そもそも、たしろう様のプロジェクトにおいてDBの再起動、LANケーブルが抜かれるって状況は、頻繁に発生するのでしょうか?



たしろう
会議室デビュー日: 2004/05/25
投稿数: 10
投稿日時: 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


たしろう
会議室デビュー日: 2004/05/25
投稿数: 10
投稿日時: 2005-04-13 13:49
Max Pool Sizeを1や5に設定してみても結果は同じでした。

ご参考までに。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-04-13 14:14
引用:

@ LANケーブルを抜く
A 接続エラーとなる
  一度目はコネクションのOPENは成功、コマンド発行でエラーとなる。
  二度目以降はコネクションのOPENでエラーとなる。
B Aを5分間繰り返す
C LANケーブルを挿す
D 1〜2分ほど接続エラーを繰り返す
E 接続できるようになる。



ケーブルを抜いている間(上記だと5分)はいくらリトライしても無駄だと思われますが
そのへんの処理はどうなっているのでしょうか?
実際の運用でも5秒毎にDBを監視して、DBの再起動には何分かかるか分からないんですよね?
DBを再起動する際は、監視するサービスも停止するっていう運用ルールが自然な気もします。
たしろう
会議室デビュー日: 2004/05/25
投稿数: 10
投稿日時: 2005-04-13 14:48
ケーブルを抜いた場合も同様のロジックを通ります(100回コネクトし失敗する)。
やはり、運用で逃げるしかないですかね。もう少し検討してみます。

ご協力、ありがとうございました。
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2005-04-13 20:36
南部です。

接続文字列を
・正常時に使用するプーリングする接続文字列
・異常時に使用するプーリングしない接続文字列
の2つ用意してはどうでしょう。

エラーが発生したら(11と17だったかな?)
接続文字列をプーリングしないほうに切り替え、
接続できたらプーリングするほうに戻す。

でいけそうですが、試していません。
ダメだったらごめんなさい。


にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-04-14 08:39
引用:
接続できたらプーリングするほうに戻す。


このとき、前にエラーが出たヤツにまた当たったらややこしいことになりそうですね。

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