データベース ミラーリングをレプリケーションと組み合わせて使用すると、パブリケーション データベースの可用性を向上させることができます。 データベース ミラーリングには、通常は異なるコンピューターに存在する 1 つのデータベースの 2 つのコピーが含まれます。 クライアントが任意の時点において使用できるデータベースのコピーは 1 つだけです。 このコピーはプリンシパル データベースと呼ばれます。 プリンシパル データベースに対してクライアントによって行われた更新は、ミラー データベースと呼ばれるデータベースの他のコピーに適用されます。 ミラーリングでは、プリンシパル データベースに対して行われたすべての挿入、更新、または削除からミラー データベースにトランザクション ログを適用する必要があります。
パブリケーション データベースでは、ミラーへのレプリケーション フェールオーバーが完全にサポートされており、サブスクリプション データベースのサポートは限られています。 ディストリビューション データベースでは、データベース ミラーリングはサポートされていません。 レプリケーションを再構成せずにディストリビューション データベースまたはサブスクリプション データベースを復旧する方法については、「レプリケートされたデータベースの バックアップと復元」を参照してください。 サブスクライバー データベースのミラーリングについては、次を参照してください。
注
フェールオーバー後、ミラーがプリンシパルになります。 このトピックでは、"プリンシパル" と "ミラー" は常に元のプリンシパルとミラーを参照します。
データベース ミラーリングでのレプリケーションの使用に関する要件と考慮事項
データベース ミラーリングでレプリケーションを使用する場合は、次の要件と考慮事項に注意してください。
プリンシパルとミラーはディストリビューターを共有する必要があります。 これはリモート ディストリビューターにすることをお勧めします。これにより、パブリッシャーに計画外のフェールオーバーがある場合にフォールト トレランスが向上します。
レプリケーションでは、マージ レプリケーションと、読み取り専用サブスクライバーまたはキュー更新サブスクライバーを使用したトランザクション レプリケーションのパブリケーション データベースのミラーリングがサポートされます。 即時更新サブスクライバー、Oracle パブリッシャー、ピアツーピア トポロジ内のパブリッシャー、および再発行はサポートされていません。
データベースの外部に存在するメタデータとオブジェクトは、ログイン、ジョブ、リンク サーバーなど、ミラーにコピーされません。 ミラーでメタデータとオブジェクトが必要な場合は、手動でコピーする必要があります。 詳細については、「 ロールの切り替え後のログインとジョブの管理 (SQL Server)」を参照してください。
データベース ミラーリングを使用したレプリケーションの構成
レプリケーションとデータベース ミラーリングの構成には、5 つの手順が含まれます。 各手順については、次のセクションで詳しく説明します。
パブリッシャーを構成します。
データベース ミラーリングを構成します。
プリンシパルと同じディストリビューターを使用するようにミラーを構成します。
フェールオーバー用にレプリケーション エージェントを構成します。
プリンシパルとミラーをレプリケーション モニターに追加します。
手順 1 と 2 は、逆の順序で実行することもできます。
パブリケーション データベースのデータベース ミラーリングを構成するには
パブリッシャーを構成します。
リモート ディストリビューターを使用することをお勧めします。 ディストリビューションの構成の詳細については、「ディストリビューションの 構成」を参照してください。
スナップショット パブリケーションとトランザクション パブリケーションまたはマージ パブリケーションのデータベースを有効にすることができます。 複数の種類のパブリケーションを含むミラー化されたデータベースの場合は、 sp_replicationdboptionを使用して、同じノードで両方の種類のデータベースを有効にする必要があります。 たとえば、プリンシパルで次のストアド プロシージャ呼び出しを実行できます。
exec sp_replicationdboption @dbname='<PublicationDatabase>', @optname='publish', @value=true; exec sp_replicationdboption @dbname='<PublicationDatabase>', @optname='mergepublish', @value=true;
パブリケーションの作成の詳細については、「 データおよびデータベース オブジェクトのパブリッシュ」を参照してください。
データベース ミラーリングを構成します。 詳細については、「 Windows 認証を使用したデータベース ミラーリング セッションの確立 (SQL Server Management Studio) 」および「 データベース ミラーリングのセットアップ (SQL Server)」を参照してください。
ミラーのディストリビューションを構成します。 パブリッシャーとしてミラー名を指定し、プリンシパルが使用するのと同じディストリビューターとスナップショット フォルダーを指定します。 たとえば、ストアド プロシージャを使用してレプリケーションを構成する場合は、ディストリビューターで sp_adddistpublisher を実行します。をクリックし、ミラー でsp_adddistributor を実行します。 sp_adddistpublisherの場合:
@publisher パラメーターの値をミラーのネットワーク名に設定します。
@working_directory パラメーターの値を、プリンシパルによって使用されるスナップショット フォルダーに設定します。
PublisherFailoverPartner エージェント パラメーターのミラー名を指定します。 Agent このパラメーターは、フェールオーバー後に次のエージェントがミラーを識別するために必要です。
スナップショット エージェント (すべてのパブリケーションの場合)
ログ リーダー エージェント(全てのトランザクション パブリケーションに対して)
キュー リーダー エージェント (キュー更新サブスクリプションをサポートするトランザクション パブリケーションの場合)
マージ エージェント (マージ サブスクリプションの場合)
SQL Server レプリケーション リスナー (replisapi.dll: Web 同期を使用して同期されたマージ サブスクリプションの場合)
SQL Merge ActiveX コントロール (コントロールと同期されたマージ サブスクリプションの場合)
ディストリビューション エージェントとディストリビューション ActiveX コントロールはパブリッシャーに接続しないため、このパラメーターを持っていません。
エージェント パラメーターの変更は、エージェントの次回起動時に反映されます。 エージェントを継続して実行している場合は、そのエージェントを停止して再起動する必要があります。 パラメーターは、エージェント プロファイルおよびコマンド プロンプトから指定できます。 詳細については、以下を参照してください。
エージェント プロファイルに -PublisherFailoverPartner を追加し、プロファイルにミラー名を指定することをお勧めします。 たとえば、ストアド プロシージャを使用してレプリケーションを構成する場合は、次のようになります。
-- Execute sp_help_agent_profile in the context of the distribution database to get the list of profiles. -- Select the profile id of the profile that needs to be updated from the result set. -- In the agent_type column returned by sp_help_agent_profile: -- 1 = Snapshot Agent; 2 = Log Reader Agent; 3 = Distribution Agent; 4 = Merge Agent; 9 = Queue Reader Agent. exec sp_help_agent_profile; -- Setting the -PublisherFailoverPartner parameter in the default Snapshot Agent profile (profile 1). -- Execute sp_add_agent_parameter in the context of the distribution database. exec sp_add_agent_parameter @profile_id = 1, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'<Failover Partner Name>'; -- Setting the -PublisherFailoverPartner parameter in the default Merge Agent profile (profile 6). -- Execute sp_add_agent_parameter in the context of the distribution database. exec sp_add_agent_parameter @profile_id = 6, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'<Failover Partner Name>';
プリンシパルとミラーをレプリケーション モニターに追加します。 詳細については、「 レプリケーション モニターからのパブリッシャーの追加と削除」を参照してください。
ミラーリングされたパブリケーションデータベースの管理
ミラー化パブリケーション データベースの保守は、ミラー化されていないデータベースの保守と基本的に同じですが、次の点に注意してください。
管理と監視は、アクティブ なサーバーで行う必要があります。 SQL Server Management Studio では、作業中のサーバーのローカル パブリケーション フォルダーの下にパブリケーションが表示されます。 たとえば、ミラーにフェールオーバーすると、パブリケーションはミラーに表示され、プリンシパルに表示されなくなります。 データベースがミラーにフェールオーバーする場合は、変更を反映するために Management Studio とレプリケーション モニターを手動で更新することが必要になる場合があります。
レプリケーション モニターでは、プリンシパルとミラーの両方のオブジェクト ツリーにパブリッシャー ノードが表示されます。 プリンシパルがアクティブ サーバーの場合、パブリケーション情報はレプリケーション モニターのプリンシパル ノードの下にのみ表示されます。
ミラーがアクティブ サーバーの場合:
エージェントにエラーがある場合、エラーはミラー ノードではなくプリンシパル ノードでのみ示されます。
プリンシパルが使用できない場合、プリンシパル ノードとミラー ノードには同じパブリケーションの一覧が表示されます。 監視は、ミラー ノードの下のパブリケーションで実行する必要があります。
ストアド プロシージャまたはレプリケーション管理オブジェクト (RMO) を使用してミラーでレプリケーションを管理する場合、パブリッシャー名を指定する場合は、データベースがレプリケーションを有効にしたインスタンスの名前を指定する必要があります。 適切な名前を確認するには、関数 publishingservername を使用します。
パブリケーション データベースがミラー化されている場合、ミラー化されたデータベースに格納されているレプリケーション メタデータは、プリンシパル データベースに格納されているメタデータと同じです。 そのため、プリンシパルでレプリケーションが有効になっているパブリケーション データベースの場合、ミラーのシステム テーブルに格納されているパブリッシャー インスタンス名は、ミラーではなくプリンシパルの名前になります。 これは、パブリケーション データベースがミラーにフェールオーバーした場合のレプリケーションの構成とメンテナンスに影響します。 たとえば、フェールオーバー後にミラー上のストアド プロシージャを使用してレプリケーションを構成し、プリンシパルで有効にされたパブリケーション データベースにプル サブスクリプションを追加する場合は、sp_addpullsubscriptionまたはsp_addmergepullsubscriptionの@publisher パラメーターのミラー名ではなく、プリンシパル名を指定する必要があります。
ミラーへのフェールオーバー後にミラーでパブリケーション データベースを有効にした場合、システム テーブルに格納されているパブリッシャー インスタンス名はミラーの名前です。この場合は、 @publisher パラメーターにミラーの名前を使用します。
注
sp_addpublicationなどの場合、@publisher パラメーターは SQL Server 以外のパブリッシャーでのみサポートされます。このような場合、SQL Server データベース ミラーリングには関係ありません。
フェールオーバー後に Management Studio でサブスクリプションを同期するには:サブスクライバーからプル サブスクリプションを同期します。アクティブなパブリッシャーからプッシュ サブスクリプションを同期します。
ミラーリングが削除された場合のレプリケーションの動作
データベース ミラーリングがパブリッシュされたデータベースから削除される場合は、次の問題に注意してください。
プリンシパルのパブリケーション データベースがミラー化されなくなった場合、レプリケーションは元のプリンシパルに対して変更されずに動作し続けます。
パブリケーション データベースがプリンシパルからミラーにフェールオーバーし、その後ミラーリング関係が無効または削除された場合、レプリケーション エージェントはミラーに対して機能しません。 プリンシパルが完全に失われた場合は、パブリッシャーとして指定されたミラーを使用してレプリケーションを無効にしてから再構成します。
データベース ミラーリングが完全に削除された場合、ミラー データベースは復旧状態であり、機能するためには復元する必要があります。 レプリケーションに関する復旧されたデータベースの動作は、KEEP_REPLICATION オプションが指定されているかどうかによって異なります。 このオプションでは、バックアップが作成されたサーバー以外のサーバーにパブリッシュされたデータベースを復元するときに、復元操作でレプリケーション設定が保持されます。 KEEP_REPLICATION オプションは、他のパブリケーション データベースが使用できない場合にのみ使用します。 他のパブリケーション データベースが完全な状態でレプリケートされ続けている場合、このオプションはサポートされません。 KEEP_REPLICATIONの詳細については、 RESTORE (Transact-SQL) を参照してください。
ログ リーダー エージェントの動作
次の表では、データベース ミラーリングのさまざまな動作モードに対するログ リーダー エージェントの動作について説明します。
動作モード | ミラーが使用できない場合のログ リーダー エージェントの動作 |
---|---|
自動フェールオーバーを使用した高い安全性モード | ミラーが使用できない場合、ログ リーダー エージェントはコマンドをディストリビューション データベースに伝達します。 ミラーがオンラインに戻り、プリンシパルからのすべてのトランザクションを取得するまで、プリンシパルはミラーにフェールオーバーできません。 |
高パフォーマンス モード | ミラーが使用できない場合、プリンシパル データベースは公開 (つまり、ミラー化されていない) で実行されています。 ただし、ログ リーダー エージェントは、ミラーで強化されたトランザクションのみをレプリケートします。 サービスが強制され、ミラー サーバーがプリンシパルの役割を引き受ける場合、ログ リーダー エージェントはミラーに対して動作し、新しいトランザクションの取得を開始します。 ミラーがプリンシパルの背後にある場合、レプリケーションの待機時間が長くなることに注意してください。 |
自動フェールオーバーなしの高い安全性モード | コミットされたすべてのトランザクションは、ミラー上のディスクに対して確実に書き込まれます。 ログ リーダー エージェントは、ミラーで強化されたトランザクションのみをレプリケートします。 ミラーが使用できない場合、プリンシパルはデータベース内のそれ以降のアクティビティを禁止します。そのため、ログ リーダー エージェントにはレプリケートするトランザクションがありません。 |