レプリケーションおよびデータベース ミラーリング
データベース ミラーリングを使用して、特定のレプリケーション データベースの可用性を向上できます。トランザクション レプリケーションとデータベース ミラーリングの組み合わせがサポートされるかどうかは、検討されているレプリケーション データベースによります。ピア ツー ピア レプリケーションとデータベース ミラーリングの組み合わせはサポートされていません。データベース ミラーリングの詳細については、「データベース ミラーリングの管理」を参照してください。
次の表に、レプリケーション データベースと、対応するミラーリングのサポートのレベルを示します。
レプリケーション データベース |
データベース ミラーリングとの併用がサポートされるかどうか |
---|---|
パブリケーション |
はい。 自動フェールオーバーを使用するマージ レプリケーションとトランザクション レプリケーションの両方でサポートされます。パブリケーション データベースに接続するレプリケーション エージェントは、ミラー化されたパブリケーション データベースに自動的にフェールオーバーできます。エラーが発生すると、パブリケーション データベースに接続するレプリケーション エージェントは、新しいプリンシパル データベースに自動的に再接続します。 |
ディストリビューション |
いいえ。 ディストリビューション データベースのミラーリングはサポートされていません。ディストリビューション データベースは、レプリケーション構成が格納される場所であり、構成メタデータは、ディストリビューターが構成されているサーバーの名前と緊密に結び付けられています。ミラー化されたデータベースへのフェールオーバー時にサーバー名は変更されますが、ディストリビューション データベースに格納されている構成データは、古いディストリビューション データベース サーバーを指しています。 |
サブスクリプション |
はい。 SQL Server 2008 以降、手動でのフェールオーバーと構成を使用するトランザクション レプリケーションでサポートされます。サブスクリプション データベースに接続するレプリケーション エージェントは、ミラーリングに対応していません。プリンシパル サブスクリプション データベースでエラーが発生した場合、セカンダリ データベースにフェールオーバーするには、いくつかの手動の手順を実行して、レプリケーションのストリームを復元する必要があります。詳細については、「SQL Server のレプリケーション: データベース ミラーリングを使用した項可用性の実現」(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 exec sp_replicationdboption @dbname='<PublicationDatabase>', @optname='publish', @value=true exec sp_replicationdboption @dbname='<PublicationDatabase>', @optname='mergepublish', @value=true
パブリケーションの作成の詳細については、「データとデータベース オブジェクトのパブリッシュ」を参照してください。
データベース ミラーリングを構成します。詳細については、「データベース ミラーリング セッションを構成する方法 (SQL Server Management Studio)」および「データベース ミラーリングの設定」を参照してください。
ディストリビューションをミラー用に構成します。ミラー名をパブリッシャーとして指定し、プリンシパルと同一のディストリビューターおよびスナップショット フォルダーを指定します。たとえば、ストアド プロシージャを使用してレプリケーションを構成する場合、ディストリビューターで sp_adddistpublisher を実行し、次にミラーで sp_adddistributor を実行します。sp_adddistpublisher の場合は、以下の手順を実行します。
@publisher パラメーターの値にミラーのネットワーク名を設定します。
@working_directory パラメーターの値にプリンシパルで使用するスナップショット フォルダーを設定します。
–PublisherFailoverPartner エージェント パラメーターの値にミラー名を指定します。フェールオーバーの後、以下のエージェントでミラーを特定する場合にこのエージェント パラメーターが必要になります。
スナップショット エージェント (すべてのパブリケーション用)
ログ リーダー エージェント (すべてのトランザクション パブリケーション用)
キュー リーダー エージェント (キュー更新サブスクリプションをサポートするトランザクション パブリケーション用)
マージ エージェント (マージ サブスクリプション用)
SQL Server レプリケーション リスナー (replisapi.dll : Web 同期を使用して同期したマージ サブスクリプション用)
SQL マージ ActiveX コントロール (このコントロールを使用して同期したマージ サブスクリプション用)
ディストリビューション エージェントおよびディストリビューション ActiveX コントロールはパブリッシャーに接続しないため、このパラメーターがありません。
エージェント パラメーターの変更は、エージェントを次に起動したときに有効になります。エージェントを連続実行する場合は、いったん停止してから再起動する必要があります。パラメーターは、エージェント プロファイルおよびコマンド プロンプトで指定できます。詳細については、次のトピックを参照してください。
レプリケーション エージェント プロファイルを操作する方法 (SQL Server Management Studio)
レプリケーション エージェント コマンド プロンプト パラメータを表示および変更する方法 (SQL Server Management Studio)
–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>' -- 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)」を参照してください。
ログ リーダー エージェントの動作
データベース ミラーリングのさまざまな動作モードに対するログ リーダー エージェントの動作を次の表に示します。動作モードの詳細については、「Transact-SQL の設定とデータベース ミラーリングの動作モード」を参照してください。
動作モード |
ミラーが使用できない場合のログ リーダー エージェントの動作 |
---|---|
自動フェールオーバーを伴う高い安全性モード |
ミラーが使用できない場合、ログ リーダー エージェントはコマンドをディストリビューション データベースに反映します。ミラーがオンラインに戻り、プリンシパルからすべてのトランザクションを受け取るまで、プリンシパルからミラーへのフェールオーバーは発生しません。 |
高パフォーマンス モード |
ミラーが使用できない場合、プリンシパル データベースは無防備な (つまり、ミラー化されていない) 状態で稼働していることになります。ただし、ログ リーダー エージェントはミラーで保存されたトランザクションのみをレプリケートします。サービスが強制され、ミラー サーバーがプリンシパルとしての役割を回復すると、ログ リーダー エージェントがミラーに対して機能し、新しいトランザクションの取得を開始します。詳細については、「強制的なサービスの起動 (データ損失の可能性あり)」を参照してください。 ミラーがプリンシパルより遅れた場合、レプリケーションの待機時間が増大することに注意してください。 |
自動フェールオーバーを伴わない高い安全性モード |
コミット済みのすべてのトランザクションがミラーのディスクに保存されることが保証されます。ログ リーダー エージェントはミラーで保存されたトランザクションのみをレプリケートします。ミラーが使用できない場合、プリンシパルのデータベースが停止します。そのため、ログ リーダー エージェントがレプリケートするトランザクションがなくなります。 |