マージ レプリケーションのバックアップと復元の方式

マージ レプリケーションでは、次のデータベースを定期的にバックアップします。

  • パブリッシャにあるパブリケーション データベース

  • ディストリビュータにあるディストリビューション データベース

  • 各サブスクライバにあるサブスクリプション データベース

  • パブリッシャ、ディストリビュータ、およびすべてのサブスクライバにある master および msdb システム データベース。これらのデータベースは、相互に関連するレプリケーション データベースとして、同時にバックアップする必要があります。たとえば、パブリッシャでパブリケーション データベースをバックアップするときに、master および msdb データベースも同時にバックアップします。パブリケーション データベースを復元するときは、master および msdb データベースのレプリケーションの構成と設定が、パブリケーション データベースと一致していることを確認します。

定期的なログ バックアップを実行する場合は、レプリケーション関連の変更をログ バックアップでキャプチャする必要があります。ログ バックアップを実行しない場合は、レプリケーションに関連する設定を変更するたびに、バックアップを実行する必要があります。詳細については、「一般にバックアップの更新が必要になるアクション」を参照してください。

以下で詳しく説明するパブリケーション データベースのバックアップと復元の方法のいずれかを選択し、ディストリビューション データベースとサブスクリプション データベースに対する推奨事項に従ってください。

パブリケーション データベースのバックアップと復元

マージ パブリケーション データベースの復元方法は 2 とおりあります。バックアップからパブリケーション データベースを復元した後に、次のいずれかを実行する必要があります。

  • パブリケーション データベースとサブスクリプション データベースを同期する。

  • パブリケーション データベースにあるパブリケーションへのすべてのサブスクリプションを再初期化する。

これらのいずれかの方法を使用すると、復元の実行後にパブリッシャとすべてのサブスクライバが同期されます。

注意注意

ID 列を含むテーブルを使用している場合は、復元後、正しい ID 範囲を割り当てる必要があります。詳細については、「ID 列のレプリケート」を参照してください。

パブリケーション データベースの同期

パブリケーション データベースとサブスクリプション データベースを同期すると、パブリケーション データベースで以前に変更され、復元されたバックアップに表示されていない変更を 1 つ以上のサブスクリプション データベースからアップロードできます。アップロードできるデータは、パブリケーションのフィルタ選択方法によって次のように異なります。

  • パブリケーションがフィルタ選択されていない場合は、最新のサブスクライバと同期することでパブリケーション データベースを最新の状態に更新できます。

  • パブリケーションがフィルタ選択されている場合は、パブリケーションを最新の状態に更新できない場合があります。たとえば、各サブスクリプションが 1 つの地域 (北、東、南、西のいずれか) の顧客データのみを受信できるようにパーティション分割されているテーブルがあるとします。データの各パーティションに 1 つ以上のサブスクライバがある場合、各パーティションのサブスクライバと同期することにより、パブリケーション データベースを最新の状態に更新できます。ただし、たとえば、西パーティションのデータがすべてのサブスクライバにレプリケートされていない場合は、パブリッシャでこのデータを最新の状態に更新することはできません。

重要な注意事項重要

パブリケーション データベースとサブスクリプション データベースを同期することによって、復元対象のパブリッシュされたテーブルを、バックアップから復元されたパブリッシュされていないテーブルよりも新しい状態にすることができます。

MicrosoftSQL Server 2005 よりも前のバージョンの MicrosoftSQL Server を実行しているサブスクライバと同期する場合は、サブスクリプションを匿名にすることはできません。このサブスクリプションはクライアント サブスクリプションまたはサーバー サブスクリプション (前のリリースではローカル サブスクリプションとグローバル サブスクリプションと呼ばれていました) にする必要があります。

サブスクリプションを同期するには

すべてのサブスクリプションの再初期化

すべてのサブスクリプションを再初期化すると、すべてのサブスクライバを、復元されたパブリケーション データベースと一貫性のある状態に保つことができます。特定のパブリケーション データベースのバックアップで再現される、以前の状態にトポロジ全体を戻す場合は、この方法を使用する必要があります。たとえば、誤って実行したバッチ操作から復旧するメカニズムとして、パブリケーション データベースをより古い時点に復元する場合に、すべてのサブスクリプションを再初期化することができます。

このオプションを選択する場合には、パブリケーション データベースを復元した直後に、再初期化されたサブスクライバに配信するための新しいスナップショットを生成します。

サブスクリプションを再初期化するには

スナップショットを作成および適用するには

ディストリビューション データベースのバックアップと復元

マージ レプリケーションでは、ディストリビューション データベースを定期的にバックアップする必要があります。この場合、使用されるバックアップがディストリビュータを使用するすべてのパブリケーションの最短の保有期間よりも古くない限り、特に注意することなく復元できます。たとえば、保有期間がそれぞれ 10、20、および 30 日に設定されている 3 つのパブリケーションがある場合は、10 日より長く経過したバックアップはデータベースの復元に使用できません。マージ レプリケーションでは、ディストリビューション データベースの役割が制限されています。変更の追跡に使用されるすべてのデータは保存されず、トランザクション レプリケーションのような、サブスクリプション データベースの転送先となるマージ レプリケーションの変更の一時的な保存場所も用意されません。

サブスクリプション データベースのバックアップと復元

サブスクリプション データベースを正常に復元するためには、サブスクライバとパブリッシャを同期してから、サブスクリプション データベースをバックアップする必要があります。また、サブスクリプション データベースの復元後にも同期を行う必要があります。

  • サブスクリプション データベースのバックアップの前にパブリッシャと同期することにより、サブスクライバをバックアップから復元した場合に、サブスクリプションをパブリケーションの保有期間内の状態に保つことができます。たとえば、保有期間が 10 日間に設定されているパブリケーションがあるとします。最後の同期が 8 日前で、現在バックアップが実行されています。4 日後にバックアップが復元されると、最後の同期は 12 日前に行われたことになり、保有期間は過ぎてしまいます。この場合は、サブスクライバを再初期化する必要があります。バックアップの前にサブスクライバを同期しておくと、サブスクリプション データベースを保有期間内の状態に保つことができます。

    サブスクライバがサブスクライブするすべてのパブリケーションの最短の保有期間よりも古いバックアップは使用できません。たとえば、保有期間がそれぞれ 10、20、および 30 日に設定されている 3 つのパブリケーションをサブスクライバがサブスクライブする場合、10 日より長く経過したバックアップはデータベースの復元に使用できません。

  • 復元後にサブスクリプション データベースとそれぞれのパブリケーションを同期すると、パブリッシャのすべての変更を含む最新の状態にサブスクライバを保つことができます。

パブリケーションの保有期間を設定するには

サブスクリプションを同期するには

再パブリッシュ データベースのバックアップと復元

あるデータベースがパブリッシャからのデータをサブスクライブしてから、同じデータを別のサブスクリプション データベースにパブリッシュするとき、このデータベースのことを再パブリッシュ データベースと言います。再パブリッシュ データベースを復元する場合は、このトピックの「パブリケーション データベースのバックアップと復元」および「サブスクリプション データベースのバックアップと復元」で説明されているガイドラインに従ってください。