Microsoft.com の内部事情データベース ミラーリングの概要

Saleem Hakani

使用中のデータベースがいきなりオフラインになったらどうしますか? SQL Server 2005 SP1 のデータベース ミラーリング機能を使用すれば、障害を防ぐことができます。この新しい高可用性テクノロジでは、実稼働データベース サーバーが使用できなくなったときに備えて、もう 1 つのデータベースをホット スタンバイ状態で稼働しておけるのです。

データベース ミラーリング機能は、プライマリ サーバーのデータベースのトランザクション ログ レコードを、ホット スタンバイ状態のセカンダリ サーバーに転送することによって機能します。データの変更内容は、SQL Server™ の通常の更新動作と同じように、実際のデータ ページに適用される前にトランザクション ログに記録されます。このログ レコードは、プリンシパル データベースのメモリ内ログ バッファに書き込まれ、その後ディスクに保存されます。同じログは、ミラー サーバーのデータベースにもコピーされ、再生されます。これで、プリンシパル データベースの変更内容がミラー データベース上にコピーされます。なお、クライアント接続からアクセスできるのはプリンシパル データベースだけです。プリンシパル データベースがクライアントからの変更要求を受け取ると、プリンシパル サーバーにより、アクティブな変更内容がミラー サーバーに送信されます。一方、ミラー側では、このような決定処理は行われません。データベース ミラーリング機能を有効にすると、プリンシパル データベースで障害が発生した場合に、ミラー データベースが使用可能になります。

データベース ミラーリング機能のしくみ

データベース ミラーリング機能は、SQL Server 2005 をサポートするすべての標準ハードウェアに対応し、データベース障害の発生時にデータが失われないよう保護します。ミラー データベースは、プライマリ データベース サーバー上で実行されるトランザクションによって常時更新されます。図 1 に、このデータ フローを示します。

プリンシパル サーバーがダウンしても、前回トランザクションがコミットされた時点のプリンシパル データベースがミラー サーバーに正確にコピーされているので安心です。このミラー サーバーで、プリンシパル サーバーの役割を即座に引き継ぐことができます。

Figure 1 Data replication to the mirror

Figure 1** Data replication to the mirror **(画像を拡大するには、ここをクリックします)

プリンシパルからミラー、またはミラーからプリンシパルに自動的にフェールオーバーするためには、データベース ミラーリング トポロジにミラーリング監視サーバーと呼ばれる 3 台目のサーバーを用意する必要があります。SQL Server 2005 をサポートしていれば、どのコンピュータでもミラーリング監視サーバーに指定できます。

動作モード

どのようなデータベース ミラーリング トポロジを使用するかは、トランザクションの安全性と動作モードの選択によって異なります。データベース ミラーリング機能で選択できる動作モードには、高安全性モード (自動フェールオーバーは有効または無効) と高パフォーマンス モードがあります。

高安全性モード (自動フェールオーバー有効)。ミラー データベースへの同期データ転送および自動フェールオーバーにより、データベースの可用性を最大限に高めます。プリンシパル サーバーとミラー サーバー間の通信の信頼性と速度が優れており、単一データベースの自動フェールオーバーが必要な場合に最適です。この動作モードでは、プリンシパル データベースは、ミラー サーバーからトランザクション ログをディスクに保存したというメッセージを受け取ってからトランザクションをコミットします。

高安全性モード (自動フェールオーバー無効)。ミラー データベースへの同期データ転送により、データベースの可用性を最大限に高めます。ただし、自動フェールオーバーは行いません。このモードでは、ミラー サーバー インスタンスが使用できなくなってもプリンシパル サーバー インスタンスは無事ですが、データのミラーリングはできなくなります。プリンシパル サーバーがダウンした場合、データベース ミラーリングは中断されます。サービスの強制的なフェールオーバーは、手動で実行することができます。

高パフォーマンス モード。非同期データ転送を行います。プリンシパル サーバーは、上の 2 つのモードとは異なり、ミラーからの受信確認を待ちません。ミラー サーバーはプリンシパル サーバーとの同期を最大限確保しようとしますが、プリンシパル サーバー上の最新のトランザクションがすべてミラー サーバーのトランザクション ログに保存される保証はありません。プリンシパル サーバーがダウンした場合、データベース ミラーリングは中断されます。サービスの強制的なフェールオーバーは、手動で実行することができます。

準備作業

ベスト プラクティスに従ってしっかり下準備をしておけば、データベース ミラーリングのセットアップは簡単です。

サーバーのエディション プリンシパル サーバーとミラー サーバーで実行されている SQL Server 2005 のエディションが同じであることをもう一度確認してください。Standard Edition または Enterprise Edition のいずれかを使用できます。

ミラーリング監視サーバーの可用性 自動フェールオーバーが有効な高安全性モードを使用する計画の場合は、SQL Server 2005 (任意のエディション) がインストールされたミラーリング監視サーバーが使用できることを確認してください。ミラーリング監視サーバーは、SQL Server 2005 をサポートする信頼性の高い任意のコンピュータ システムで実行できます。

ミラー イメージ ミラー サーバー インスタンスとプリンシパル サーバー インスタンスのジョブ、ログイン、SQL Server Integration Service (SSIS) パッケージ、ディスク パーティション、ファイルの格納場所、およびサーバー構成が完全に一致していることを確認してください。ミラー サーバーをプリンシパル サーバーとまったく同じ構成にすることで、プリンシパル サーバーと同じように動作させることができます。

完全復旧 データベース ミラーリング機能を使用するすべてのデータベースは、完全復旧モデルに設定する必要があります。

マスタ データベースと TempDB ミラーリング トポロジに含まれるすべてのサーバー インスタンスで、マスタ データベースと TempDB の照合順序およびコード ページが一致していることを確認してください。照合順序やコード ページが異なる場合、データベース ミラーリングのセットアップ中に問題が発生することがあります。

バックアップ ミラー化するデータベースのサイズが大きい場合は、最初にデータベースの完全バックアップを実行します。その後、ミラー サーバー インスタンス上で NORECOVERY オプションを使用してバックアップを復元します。

事前の計画 サーバー名、ポート番号、セキュリティ アカウント、およびデータベースの配置場所をすべて事前に決定し、文書化しておきます。補足記事「データベース ミラーリングのベスト プラクティス」のチェックリストを参照してください。

準備作業が完了したら、いよいよデータベース ミラーリングのセットアップ開始です。

セットアップ

では、データベース ミラーリングのセットアップを開始しましょう。ここでは、自動フェールオーバーを有効にした高安全性モードを選択するので、前述のようにミラーリング監視サーバーが必要になります。図 2 に、サンプルのサーバー名、データベース名、および各サーバーの役割を示します。

データベース ミラーリングでは、保留中のトランザクション ログをプリンシパル サーバーからミラー サーバーにコピーします。このため、構成内容によってはパフォーマンスに悪影響が出る場合があります。データベース ミラーリングの初期構成は、ピーク時を避けて行うことをお勧めします。

ミラーのセットアップは 3 段階で行います。まず、データベース ミラーリングに使用する各サーバー上にエンドポイントを作成します。次に、プリンシパル データベースのバックアップと復元を実行します。そして最後に、データベース ミラーリングに使用するすべてのサーバー上でセッションのミラーリングを有効にします。

データベース ミラーリング セッションを開始する前に、データベース ミラーリングに使用するすべてのサーバーの通信メカニズムを確立する必要があります。このためには、ServerA と ServerB の両方で次のステートメントを実行することにより、すべてのサーバー上にエンドポイントを作成します。

Create Endpoint Mirroring_Endpoint
State= Started as TCP (Listener_Port=5001)
For Database_Mirroring (Role=Partner);

ServerC (ミラーリング監視サーバー) では、このステートメントの (Role=Partner) の部分を (Role=Witness) に変更して実行します。これで、各インスタンスがリッスンする TCP ポートが決まります。

次に、データベースの完全バックアップを実行し、続いてプリンシパル サーバーの DBM_Demo データベースのログ バックアップを実行します。その後、NORECOVERY オプションを指定して、このバックアップをミラー サーバー インスタンス上で復元します。NORECOVERY オプションを指定すると、ミラー データベースは "復元中" 状態になるので、トランザクション ログを適用することができます。

次の T-SQL ステートメントを実行すると、ServerA (プリンシパル サーバー インスタンス) の DBM_Demo データベースの完全バックアップが実行されます。

Backup Database DBM_Demo to DISK='E:\MSSQL\Bak\DBM_Demo_FULL.bak';

データベースの完全バックアップの実行後に、データベースに変更が加えられた場合は、データベースのログ バックアップを実行します。変更がない場合は必要ありません。

必要に応じ、次の T-SQL ステートメントを使用して、ServerA の DBM_Demo データベースのログ バックアップを実行します。

Backup Log DBM_Demo to Disk='E:\MSSQL\Bak\DBM_Demo_Log.bak';

すべてのバックアップが完了したら、ServerB 上でバックアップを復元できるように、バックアップ ファイルを ServerB または共有の場所に移動します。バックアップ ファイルを ServerB 上で復元したら、前回 ServerA のデータベースの完全バックアップを実行した後に実行したすべてのトランザクション ログ バックアップも復元します。

次の T-SQL ステートメントを実行すると、ServerB 上で、完全バックアップおよびログ バックアップの復元 (NORECOVERY オプション指定) が実行されます。

--Restore full database backup on the mirror --server instance
Restore Database DBM_Demo from Disk='E:\MSSQL\Bak\DBM_Demo_FULL.bak' with NORECOVERY;

最後に、次の T-SQL ステートメントを実行します。このステートメントでは、ミラー サーバー上で、ログ バックアップの復元 (NORECOVERY オプション指定) が実行されます。

Restore Log DBM_Demo from Disk='E:\MSSQL\Bak\DBM_Demo_Log.bak' with NORECOVERY;

すべてのバックアップを復元できたら、最終段階です。データベース ミラーリングに使用するすべてのサーバー上で、データベース ミラーリング セッションを有効にします。

データベース ミラーリング セッションをセットアップするには、各 サーバー インスタンスのサーバー ネットワーク アドレスが必要です。このアドレスは各サーバー インスタンスを識別するアドレスであり、システム アドレスとそのサーバー インスタンスがリッスンしているポート番号で構成されます。サーバー ネットワーク アドレスは、次のようになります。

TCP://<System-address>:<port>

<System-address> の部分は、完全修飾ドメイン名または IP アドレスで置き換えます。この情報を確認するには、ローカル コンピュータのコマンド プロンプトで IPCONFIG を実行します。

<Port> の部分は、エンドポイントの作成時に設定したポート番号で置き換えます。

次のステートメントを実行して、ServerB 上でデータベース ミラーリング セッションを開始します。

Alter Database DBM_Demo
Set Partner= 'TCP://ServerA.com:5001';

続いて次の T-SQL ステートメントを実行し、ServerA 上でもセッションを開始します。

Alter Database DBM_Demo
Set Partner='TCP://ServerB.com:5001';

さらに、ServerC (ミラーリング監視サーバー) 上でミラーリング セッションを有効にします。

Alter Database DBM_Demo
Set Witness='TCP://ServerC.com:5001';

これで、データベース ミラーリング機能の設定は完了です。DBM_Demo データベース上でデータベース オブジェクトが追加または変更されると、同じ内容が ServerB 上のミラー データベースに転送されます。ServerA のデータベースが使用できなくなった場合は、フェールオーバーが行われ、ミラー データベースがプリンシパルの役割を引き継ぎます。

これで、データベース ミラーリング機能の導入は完了です。ホット スタンバイ状態のデータベースが待機しているので、実稼働データベースがダウンしても、対策は万全です。

Saleem Hakani は、Microsoft で 14 年以上データベース システム関係の業務を担当しているシニア データベース エンジニアです。彼は、Microsoft SQL コミュニティの創設者として、SQL Server における標準の策定と Windows Live サービス全体での自動化業務に従事しており、MCTS、MCDBA、および MCSA の資格を取得しています。連絡先は、Saleem@sqlcommunity.net (英語のみ) です。

© 2008 Microsoft Corporation and CMP Media, LLC. All rights reserved; 許可なしに一部または全体を複製することは禁止されています.