Javaでシステム開発を行っています。
データベース接続時に、odbcのフェイルオーバーの設定を使って、
データベースAに接続できない場合は、データベースBに接続するように考えています。
この時、「接続できない」とはどういう状況の事を指すのでしょうか。
断線などでのデータベースサーバとの通信ができない場合も、Bに繋ぎに
行ってくれるのでしょうか。
それとも、通信できる事がが前提で、データベースとの接続が
できない場合のみなのでしょうか。
よろしくお願いします。
「接続できない」という状態は「サーバに接続しても応答がない」ことから判断されます。「応答がない」理由まではわからない為、あくまで「接続できない」ときに接続可能なデータベースを探しに行く仕組みになっています。
例えば、データベースAにつなぎにいってだめならデータベースBにつなぎに行くということですので、AとBの双方がつぶれていない場合は、オフィス全体のネットワーク断線などでもない限り、どちらかのデータベースが応答を返してくれます。
ケースとしては断線や回線混雑などネットワークの問題で通信できない場合のほか、サーバが高負荷のため処理がおいつかず、クライアントへ応答できない場合も含まれます。
この「応答がない」を判断するロジックは個々の製品に依存しますが、例えば5秒間返事がなく、かつ、リトライを3回しても返事がない場合、などOracle社の製品で見かけたことがあります。サーバをクラスタ化する際に使う負荷分散装置などは常にpingをサーバに対して投げかけて、応答があるかないかを監視していますが、odbcの場合は、データベースにつなぎにいった際に、応答がない場合に、別のデータベースにつなぎにいくと思われます。
お使いのodbcこのあたりの動作詳細が必要でしたら、じっくりと調査されるとよいと思います。
この質問への回答やコメントをメールでお知らせします。