トップ回答者
OracleのRACの”ような”データベースをSQLServerで実現する方法は?

質問
-
いつも参考にさせていただいております。
いま、OracleのRACのようなデータベースをSQLServerで実現する方法としてどのようなものがあるかという検討を行っています。
RACのようなというのは、
・複数台のデータベースサーバーで、同じデータを参照・更新することができる
・複数台のデータベースサーバーで処理を分散できる
・特定のサーバーの障害時にも、ひきつづき利用することができる(アプリケーション側になんらかの仕組みをもつことも可)
・データベースを利用するアプリケーションはWebアプリケーション
・更新したデータは若干のタイムラグがあってもよい(完全に1つのデータベースでなくともいいということです)
・もちろん、Windows前提です。(2003 or 2008)
・SQLServerは2008とします。
MSCS、データベースミラーリング、レプリケーションなどを組み合わせていろいろと考えておりますが、プロフェッショナルなみなさんのお知恵を拝借できればと思います。
よろしくお願いいたします。
回答
-
SQL Server では、サーバー間のメモリを共有することが現時点では出来ないため、 "複数台のデータベースサーバーで、同じデータを参照・更新することができる" (Oracle 用語で言うと、キャッシュ フュージョン でしょうか。) は出来ないと思います。
RAC = 自動フェールオーバー が行えるという定義であれば、MSCS、ミラーリング でまかなえると思います。
尚、ミラーリングの場合は、データーベース単位でしか設定を行うことができません。
例えば、100個のデータベースを保有するSQL Serverにて、プリンシパル 側のサーバーが障害でダウンした場合、100個のデータベースが一斉に全てミラー側へフェールオーバーが発生してしまい、大量のキューが発生し、それがボトルネックとなってしまうという恐れがあります。
つまり、上記のような環境では、ミラーリングは向かないということになると思います。 (上記のような環境では、MSCSを検討することになると思います。)
今後、新しい構成をご検討されるのであれば、もっと具体的な要件を絞る必要があるかもしれません。
[例]
障害発生時から復旧までの許容された時間
構成に掛けられるコスト
データベースの個数
更新したデータがすべてのデータベースに反映されるまでの許容できる時間
アプリケーションにて接続するインスタンス名を切り替えることが可能/不可能
などでしょうか。- 回答としてマーク sk7474 2009年5月26日 9:04
すべての返信
-
SQL Server では、サーバー間のメモリを共有することが現時点では出来ないため、 "複数台のデータベースサーバーで、同じデータを参照・更新することができる" (Oracle 用語で言うと、キャッシュ フュージョン でしょうか。) は出来ないと思います。
RAC = 自動フェールオーバー が行えるという定義であれば、MSCS、ミラーリング でまかなえると思います。
尚、ミラーリングの場合は、データーベース単位でしか設定を行うことができません。
例えば、100個のデータベースを保有するSQL Serverにて、プリンシパル 側のサーバーが障害でダウンした場合、100個のデータベースが一斉に全てミラー側へフェールオーバーが発生してしまい、大量のキューが発生し、それがボトルネックとなってしまうという恐れがあります。
つまり、上記のような環境では、ミラーリングは向かないということになると思います。 (上記のような環境では、MSCSを検討することになると思います。)
今後、新しい構成をご検討されるのであれば、もっと具体的な要件を絞る必要があるかもしれません。
[例]
障害発生時から復旧までの許容された時間
構成に掛けられるコスト
データベースの個数
更新したデータがすべてのデータベースに反映されるまでの許容できる時間
アプリケーションにて接続するインスタンス名を切り替えることが可能/不可能
などでしょうか。- 回答としてマーク sk7474 2009年5月26日 9:04