スナップショットを使用しないマージ サブスクリプションの初期化

注意

この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。

マージ パブリケーションへのサブスクリプションは、既定ではスナップショットを使用して初期化されます。このスナップショットはスナップショット エージェントによって生成され、マージ エージェントによって適用されます。場合によっては、バックアップなどの別の方法でサブスクリプションを初期化できます。マージ レプリケーションは、フィルター選択されたパブリケーションとフィルター選択されていないパブリケーションの両方で、スナップショットを使用しないサブスクリプションの初期化をサポートします。このオプションは、フィルター選択されていないパブリケーションや静的フィルターでより一般的に使用されます。パラメーター化されたフィルターを使用するパブリケーションは通常、サブスクライバーのパーティションのスナップショットを使用して初期化されます。詳細については、「パラメータ化されたフィルタを使用したマージ パブリケーションのスナップショット」を参照してください。

できる限り、スナップショットを使用してサブスクリプションを初期化してください。特に次の状況では、スナップショットを使用してサブスクリプションを初期化するようにしてください。

  • パブリッシャーで、列レベルの追跡を使用する場合、列フィルター選択を使用する場合、またはスキーマに変更を加える場合。この場合、スナップショットを使用せずにサブスクリプションを初期化すると、収束できない可能性があります。

  • Web 同期を使用している場合、スナップショット ファイルがサブスクライバーにレプリケートされますが、それらのファイルは使用されません。

  • サブスクリプションを再初期化する必要がある場合。

  • 事前計算済みパーティションを使用してパフォーマンスを向上させる必要がある場合。

バックアップまたは別の方法を使用してマージ サブスクリプションを初期化するには、次の手順を使用します。

  1. マージ レプリケーションで使用するテーブルに、rowguid および not null 列属性を持つ uniqueidentifier 列を追加します。

  2. サブスクライバーの初期化に使用するデータベースのバックアップを実行します。

  3. パブリケーションを作成し、そのパブリケーションのスナップショットを生成します。スナップショットのパブリッシュされたテーブルからのスキーマおよびデータを使用しない場合でも、スナップショットは必要です。スナップショットには、レプリケーションに必要なシステム オブジェクトやメタデータが含まれているためです。これらのオブジェクトやメタデータは、初期同期中にサブスクライバーにコピーされます。

  4. サブスクライバーでバックアップを復元するか、別の方法を使用してデータをコピーします。バックアップを復元する場合は、KEEP_REPLICATION オプションは指定しないでください。このオプションは、復元中にレプリケーションの設定を維持するように設計されています。バックアップはパブリッシャーからのものであるため、パブリッシャーの設定をデータベースから削除する必要があります。初期同期後には、復元されたデータベースに必要なサブスクライバー設定が含まれます。

  5. サブスクリプションを作成し、サブスクリプションを手動で初期化するように指定します。

    注意

    スナップショットを使用せずにサブスクリプションを初期化する場合、パブリッシャーで SQL Server サービスを実行する際に使用されるアカウントには、ディストリビューターのスナップショット フォルダーに対する書き込み権限が必要です。権限の詳細については、「レプリケーション エージェントのセキュリティ モデル」を参照してください。

    詳細については、次のトピックを参照してください。

  6. マージ エージェントとの初期同期を実行して、レプリケーションに必要なオブジェクトおよびメタデータをコピーします。サブスクライバーが同期されて、パブリッシャーから増分変更を受けれ入れることができるようになります。