パラメータ化されたフィルタを使用したマージ パブリケーションのスナップショット

パラメータ化された行フィルタがマージ パブリケーションで使用される場合、レプリケーションは 2 つの要素から成るスナップショットを持つ各サブスクリプションを初期化します。まず、レプリケーションに必要なすべてのオブジェクトとパブリッシュされたオブジェクトのスキーマが含まれるスキーマ スナップショットが作成されます。ただしデータは含まれません。次に、スキーマ スナップショットからのオブジェクトとスキーマが含まれるスナップショットと、サブスクリプションのパーティションに属するデータを使用して、各サブスクリプションが初期化されます。複数のサブスクリプションが特定のパーティションを受信する場合 (つまり、同じスキーマとデータを受信する場合)、そのパーティションのスナップショットは 1 回しか作成されません。複数のサブスクリプションは、同じスナップショットから初期化されます。パラメータ化された行フィルタの詳細については、「パラメータ化された行フィルタ」を参照してください。

次の 3 つの方法のいずれかで、パラメータ化されたフィルタを使用して、パブリケーションのスナップショットを作成できます。

  • 各パーティションのスナップショットを事前に生成します。このオプションを使用すると、スナップショットが生成されたときに制御できます。

    スナップショットがスケジュールに従って更新されるように選択することもできます。スナップショットの作成対象となったパーティションをサブスクライブする新しいサブスクライバは、最新のスナップショットを受信します。

  • サブスクライバが初めて同期されたときに、スナップショットの生成と適用を要求できるようにします。このオプションを使用すると、新しいサブスクライバは管理者の介入を必要としないで同期できます (スナップショットを生成するには SQL Server エージェントがパブリッシャで実行されている必要があります)。

    注意注意

    パブリケーション内の 1 つ以上のアーティクルにフィルタを適用して、各サブスクリプション固有の重複しないパーティションが得られる場合、マージ エージェントが実行されるたびにメタデータがクリーンアップされます。これは、パーティション スナップショットの有効期限が短いことを意味しています。このオプションを使用する場合は、サブスクライバに対してスナップショットの生成と配信を許可することを検討する必要があります。フィルタ オプションの詳細については、「パラメータ化された行フィルタ」を参照してください。

  • スナップショット エージェントを使用して、手動で各サブスクライバのスナップショットを生成します。サブスクライバは、マージ エージェントが正しいスナップショットを取得および適用できるように、スナップショットの場所をマージ エージェントに提供する必要があります。

    注意注意

    このオプションは、旧バージョンとの互換性のためにサポートされており、FTP スナップショット共有を使用できません。

最も柔軟性の高い方法は、事前に生成され、サブスクライバに要求されるスナップショット オプションの組み合わせを使用することです。スナップショットは、スケジュールに基づいて (通常はオフピーク時に) 事前生成および更新されますが、新しいパーティションを必要とするサブスクリプションが作成された場合は、サブスクライバが独自のスナップショットを生成できます。

各店舗に在庫を配送する移動営業部署のある Adventure Works について考えてみましょう。各営業担当者は、各自のログインに基づいてサブスクリプションを受信し、各自が担当する店舗についてのデータを取得します。管理者は、スナップショットを事前に生成し、毎週日曜日に更新するように選択しています。場合によっては、新しいユーザーがシステムに追加され、スナップショットを使用できないパーティションのデータが必要になります。管理者の選択により、サブスクライバが開始するスナップショットで、スナップショットがまだ使用できないためにサブスクライバがパブリケーションをサブスクライブできない状況を回避することもできます。新しいサブスクライバが初めて接続すると、指定されたパーティションに対してスナップショットが生成され、サブスクライバで適用されます (スナップショットを生成できるようにするには、SQL Server エージェントがパブリッシャで実行されている必要があります)。

パラメータ化されたフィルタを使用してパブリケーションのスナップショットを作成するには

スナップショット エージェントに対するセキュリティの設定

スナップショット エージェントは各パーティションのスナップショットを作成します。事前に生成されるスナップショットとサブスクライバによって要求されるスナップショットの場合、エージェントが実行され、パブリケーションのスナップショット エージェント ジョブ作成時に指定された資格情報に基づいて接続が作成されます (このジョブは、パブリケーションの新規作成ウィザードまたは sp_addpublication_snapshot によって作成されます)。資格情報を変更するには、sp_changedynamicsnapshot_job を使用します。詳細については、「sp_changedynamicsnapshot_job (Transact-SQL)」を参照してください。