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