適用対象:SQL Server
データベース ミラーリングとレプリケーションを組み合わせて使用すると、パブリケーション データベースの可用性を高めることができます。 データベース ミラーリングでは単一データベースの 2 つのコピーを使用します。通常、これらのコピーは異なるコンピューターに配置されます。 クライアントが任意の時点において使用できるデータベースのコピーは 1 つだけです。 このコピーはプリンシパル データベースと呼ばれます。 クライアントがプリンシパル データベースに対して加えた更新は、ミラー データベースと呼ばれるもう一方のコピー データベースに適用されます。 プリンシパル データベースに対して行われた挿入、更新、および削除はすべてトランザクション ログに記録され、ミラーリングによってこのトランザクション ログがミラー データベースに適用されます。
ミラーに対するレプリケーション フェールオーバーはパブリケーション データベースでのみ完全にサポートされ、サブスクリプション データベースでは制限付きでサポートされます。 データベース ミラーリングは、ディストリビューション データベースではサポートされていません。 レプリケーションを再構成することなく、ディストリビューション データベースおよびサブスクリプション データベースを復旧する場合の詳細については、「 レプリケートされたデータベースのバックアップと復元」を参照してください。
注
フェールオーバー後、ミラーがプリンシパルになります。 このトピックでは、"プリンシパル" および "ミラー" という言葉は常に、元のプリンシパルとミラーを表します。
レプリケーションとデータベース ミラーリングを併用する場合の要件および注意事項
レプリケーションとデータベース ミラーリングを併用する場合、以下の要件および考慮事項に注意してください。
プリンシパルとミラーは同じDistributorを使用する必要があります。 このディストリビューターにはリモート ディストリビューターを使用することをお勧めします。こうすることによって、パブリッシャーに予定外のフェールオーバーが発生した場合のフォールト トレランスが向上します。
レプリケーションでは、マージ レプリケーション、および読み取り専用サブスクライバーまたはキュー更新サブスクライバーを使用するトランザクション レプリケーションに対して、パブリケーション データベースのミラーリングをサポートします。 即時更新サブスクライバー、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 エージェント パラメーターの値にミラー名を指定します。 フェールオーバーの後、以下のエージェントでミラーを特定する場合にこのエージェント パラメーターが必要になります。
スナップショット エージェント (すべてのパブリケーション用)
ログ リーダー エージェント (すべてのトランザクション パブリケーション用)
キュー リーダー エージェント (キュー更新サブスクリプションをサポートするトランザクション パブリケーション用)
マージ エージェント (マージ サブスクリプション用)
SQL Server レプリケーション リスナー (replisapi.dll : Web 同期を使用して同期したマージ サブスクリプション用)
SQL マージ 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 などを使用する場合、SQL Server 以外のパブリッシャーに対してのみ @publisher パラメーターがサポートされます。このような場合、SQL Server のデータベース ミラーリングとは無関係になります。
フェールオーバーの後、 Management Studio でサブスクリプションを同期するには、サブスクライバーからプル サブスクリプションを同期し、アクティブなパブリッシャーからプッシュ サブスクリプションを同期します。
ミラーリングを解除した場合のレプリケーションの動作
パブリッシュされたデータベースからデータベース ミラーリングを解除する場合は、以下の点に注意してください。
プリンシパルでパブリケーション データベースが既にミラー化されていない場合、元のプリンシパルに対するレプリケーションはそのまま動作します。
パブリケーション データベースでプリンシパルからミラーへのフェールオーバーが発生した後、ミラーリング リレーションシップを無効化または解除した場合、レプリケーション エージェントがミラーに対して機能しなくなります。 プリンシパルが完全に失われた場合、ミラーのレプリケーションをいったん無効化し、その後パブリッシャーとして再構成します。
データベース ミラーリングを完全に解除した場合、ミラー データベースが復旧状態になるため、動作させるためには復元を行う必要があります。 復旧したデータベースでレプリケーションがどのように動作するかは、KEEP_REPLICATION オプションを指定したかどうかによって異なります。 このオプションを指定すると、パブリッシュされたデータベースをバックアップが作成されたサーバーと異なるサーバーに復元する場合に、復元操作でレプリケーションの設定が強制的に保存されます。 他のパブリケーション データベースが使用できない場合にのみ、KEEP_REPLICATION オプションを指定してください。 他のパブリケーション データベースが稼働中でレプリケーションを実行中の場合、このオプションはサポートされません。 KEEP_REPLICATIONの詳細については、「 RESTORE (Transact-SQL)」を参照してください。
ログ リーダー エージェントの動作
データベース ミラーリングのさまざまな動作モードに対するログ リーダー エージェントの動作を次の表に示します。
| 動作モード | ミラーが使用できない場合のログ リーダー エージェントの動作 |
|---|---|
| 自動フェールオーバーを伴う高い安全性モード | ミラーが使用できない場合、ログ リーダー エージェントはコマンドをディストリビューション データベースに反映します。 ミラーがオンラインに戻り、プリンシパルからすべてのトランザクションを受け取るまで、プリンシパルからミラーへのフェールオーバーは発生しません。 |
| 高パフォーマンス モード | ミラーが使用できない場合、プリンシパル データベースは無防備な (つまり、ミラー化されていない) 状態で稼働していることになります。 ただし、ログ リーダー エージェントはミラーで保存されたトランザクションのみをレプリケートします。 サービスが強制され、ミラー サーバーがプリンシパルとしての役割を回復すると、ログ リーダー エージェントがミラーに対して機能し、新しいトランザクションの取得を開始します。 ミラーがプリンシパルより遅れた場合、レプリケーションの待機時間が増大することに注意してください。 |
| 自動フェールオーバーを伴わない高い安全性モード | コミット済みのすべてのトランザクションがミラーのディスクに保存されることが保証されます。 ログ リーダー エージェントはミラーで保存されたトランザクションのみをレプリケートします。 ミラーが使用できない場合、プリンシパルではそのデータベースでそれ以上のアクティビティは許可されません。そのため、ログ リーダー エージェントにはレプリケートすべきトランザクションがなくなります。 |