QA@IT

odbcのフェイルオーバーについて

2897 PV

Javaでシステム開発を行っています。

データベース接続時に、odbcのフェイルオーバーの設定を使って、
データベースAに接続できない場合は、データベースBに接続するように考えています。

この時、「接続できない」とはどういう状況の事を指すのでしょうか。
断線などでのデータベースサーバとの通信ができない場合も、Bに繋ぎに
行ってくれるのでしょうか。
それとも、通信できる事がが前提で、データベースとの接続が
できない場合のみなのでしょうか。

よろしくお願いします。

回答

回答ありがとうございます。

やってみた結果は以下になりました。
・DBサーバAのoracleがおちている場合
 →AからBへ接続が確認できた(逆もOK)
・DBサーバA自体がおちている場合
 →Bへの切換えがうまくいかず、Aへ接続する場合がある(逆も同じ)

結果から推測すると、ネットワークの疎通が出来ていなければ、
jdbcのフェイルオーバーは機能しないのではないかと思われます。

Webで調べてはいますが、上記の確証が取れるものは見つかってません。

編集 履歴 (0)

「接続できない」という状態は「サーバに接続しても応答がない」ことから判断されます。「応答がない」理由まではわからない為、あくまで「接続できない」ときに接続可能なデータベースを探しに行く仕組みになっています。

例えば、データベースAにつなぎにいってだめならデータベースBにつなぎに行くということですので、AとBの双方がつぶれていない場合は、オフィス全体のネットワーク断線などでもない限り、どちらかのデータベースが応答を返してくれます。

ケースとしては断線や回線混雑などネットワークの問題で通信できない場合のほか、サーバが高負荷のため処理がおいつかず、クライアントへ応答できない場合も含まれます。

この「応答がない」を判断するロジックは個々の製品に依存しますが、例えば5秒間返事がなく、かつ、リトライを3回しても返事がない場合、などOracle社の製品で見かけたことがあります。サーバをクラスタ化する際に使う負荷分散装置などは常にpingをサーバに対して投げかけて、応答があるかないかを監視していますが、odbcの場合は、データベースにつなぎにいった際に、応答がない場合に、別のデータベースにつなぎにいくと思われます。

お使いのodbcこのあたりの動作詳細が必要でしたら、じっくりと調査されるとよいと思います。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。