リモートデータベースの高可用性
リモートデータベースシステムでデータベースのミラーリング環境を構築することもできますが、データ同期を起動する方法はさらに複雑になります。データ同期は、同期クライアントがリモートデータベースおよび同期サーバと接続を確立したときに起動されます。ただし、データベースのミラーリング環境では、どちらのデータベースがプライマリサーバとして稼動しているのか、常に認識されているわけではありません。
同期クライアントは、プライマリサーバ(あるいは、ロールの切り替えが起こった場合はミラーサーバ)と接続を確立する必要があります。よって、必然的に同期サーバはリモートデータベースと同じマシン上になければなりません。そうすれば同期クライアントは稼動中のデータベースに接続でき、システムの単一障害点を回避できます。
同期クライアントの高可用性
同期クライアントの高可用性を実現するには、クライアント側のプライマリサーバとミラーサーバの両方のマシンに同期クライアントをインストールし、その後、外部プロシージャから同期を起動します。
これはxp_cmdshellで実現できます。xp_cmdshellシステムプロシージャを使用すると、SQLコードからWindowsコマンドシェルに対しオペレーティングシステムコマンドを直接実行できます。これならば、どのマシンがプライマリサーバになっているかを認識する必要がありません。理由は以下のとおりです。
- アプリケーションがこの外部プロシージャを呼び出すと、その時点でプライマリデータベースサーバに指定されているコンピュータ上でのみ呼び出しが行われます。
- 同期クライアントはデータベースサーバを基準として呼び出されるので、データベースファイルを問題なく見つけることができます。
同期を起動する外部プロシージャの例を以下に示します。
CALL xp_cmdshell( 'START dbmlsync -c dsn=MyDB -k -o c:\\out\\ml.out -n MyPub -e sv=Version1', 'no_output' )
xp_cmdshellプロセスは、アプリケーション接続あるいはデータベースサーバマシンのシステムプロセスを通じて起動できます。
高可用性同期クライアントによる単一障害点の排除
データベースのミラーリングシステムでは、2台以上のマシンが停止しない限り、同期システム全体が停止することはありません。ただし、上記の解決方法では、同期クライアントを実行しているマシンが障害を起こすと、同期は停止します。この単一障害点を回避するには、両方のデータベースサーバ上のデータベースに格納されているスケジュールされたイベントから、外部プロシージャを呼び出すようにすればよいでしょう。こうすれば、外部アプリケーションからデータの同期を起動する必要はなくなります。スケジュールされたイベントはSybase iAnywhereのSQL Anywhereの特徴的な機能で、設定済みのスケジュールに基づいてロジックを起動することができます。スケジュールされたイベントは、現時点でプライマリサーバとなっているサーバ上でのみ実行されます。
外部プロシージャをコールする、スケジュールされたイベントの例を以下に示します。
CREATE EVENT "SyncEvent" HANDLER BEGIN event_parameter( 'NumActive' ) IF CAST( event_parameter('NumActive' ) AS INTEGER ) > 1 THEN RETURN; END IF; CALL xp_cmdshell( 'START dbmlsync -c dsn=MyDB -k -o c:\\out\\ml.out -n MyPub -e sv=Version1', 'no_output' ) END; ALTER EVENT "SyncEvent" ADD SCHEDULE "daily_sync" EVERY 10 MINUTES BETWEEN '09:00:00' AND '22:00:00';
このステートメントでは、まず、イベントパラメータNumActiveを使用してまだ同期が実行されていないことを確認します。次に、業務時間中は10分間隔で同期を起動するようにスケジュールします。
まとめ
企業システムでは、これからもデータや関連アプリケーションが常に利用可能であることを望むような傾向が続いていくでしょう。企業のデータベース管理システムを24時間常に稼動させオンラインに保つことの重要性は今後も増していくと思われます。
データベースのミラーリングは、データ同期環境で可用性と災害復旧性を実現する効果的な方法です。データベースミラーリング環境のフェールオーバーは迅速かつ自動的であり、シームレスで信頼性の高いサービスです。さらに、リモートデータベースからスケジュールされたイベントを利用してxp_cmdshellで同期を起動するようにすれば、ミラーリングアーキテクチャの単一障害点の問題を回避できます。