マージ パブリケーションのサブスクリプションは、パブリケーションの保持期間内にパブリッシャーと同期されていない場合に有効期限が切れます。 既定の保持期間は 14 日間です。 sp_addmergepublicationの @retention パラメーターと @retention_period_unit パラメーターを使用して設定 されます。 @retention_period_unitでは、パブリケーションの互換性レベルが 90RTM 以上である必要があります。 以前のバージョンの Microsoft SQL Server を実行しているサブスクライバーの場合、 @retention_period_unit は常に day に設定されます。 互換性レベルの詳細については、 レプリケーション トポロジでの SQL Server の複数バージョンの使用に関する記事の「マージ パブリケーションの互換性レベル」セクションを参照してください。
サブスクリプションのメタデータが削除されるため、サブスクリプションの有効期限が切れた場合は、サブスクリプションを再初期化する必要があります。 詳細については、「メタデータの クリーンアップ」を参照してください。 再初期化されていないサブスクリプションは、パブリッシャーで実行される期限切れのサブスクリプション クリーンアップ ジョブによって削除されます。 既定では、このジョブは毎日実行されます。パブリケーションの保持期間の 2 倍の長さで同期されていないすべてのプッシュ サブスクリプションが削除されます。 例えば次が挙げられます。
パブリケーションの保有期間が 14 日間の場合、サブスクリプションは 14 日以内に同期されていない場合に期限切れになる可能性があります。
サブスクリプションは、そのサブスクリプションのパーティション内のデータに変更があった場合にのみ有効期限が切れます。 たとえば、サブスクライバーがドイツの顧客に対してのみ顧客データを受け取ったとします。 保有期間が 14 日に設定されている場合、サブスクリプションは、過去 14 日間にそのリージョンの顧客データに変更があった場合にのみ、14 日目に有効期限が切れます。
最後の同期から 14 日から 27 日後まで、サブスクリプションを再初期化できます。
最後の同期から 28 日後に、サブスクリプションは期限切れのサブスクリプション クリーンアップ ジョブによって削除されます。 プッシュ サブスクリプションの有効期限が切れると、完全に削除されますが、プル サブスクリプションは削除されません。 プル サブスクリプションは、サブスクライバーでクリーンアップする必要があります。 詳細については、「 プル サブスクリプションの削除」を参照してください。
パブリケーションの保持期間の設定に関する考慮事項
マージ パブリケーションの保持期間を設定する場合は、次の点に注意してください。
マージ レプリケーション メタデータのクリーンアップは、パブリケーションの保持期間によって異なります。
レプリケーションでは、保有期間に達するまで、パブリケーション データベースとサブスクリプション データベースのメタデータをクリーンアップできません。 リテンション期間に高い値を指定する場合は、レプリケーションのパフォーマンスに悪影響を及ぼす可能性があるため、注意が必要です。 すべてのサブスクライバーがその期間内に定期的に同期することを確実に予測できる場合は、低い設定を使用する必要があります。
サブスクリプションの有効期限が切れない (
@retentionの場合は値 0) を指定できますが、メタデータをクリーンアップできないため、この値を使用しないでください。
リパブリッシャーのリテンション期間は、元のパブリッシャーで設定された保持期間以下の値に設定する必要があります。 代替同期パートナーを使用する場合は、パブリッシャーとすべての代替同期パートナーに同じパブリケーション保持値を使用する必要があります。 異なる値を使用すると、非コンバージエンスが発生する可能性があります。 パブリケーションのリテンション期間の値を変更する必要がある場合は、データの非競合を回避するためにサブスクライバーを再初期化します。
クリーンアップ後にパブリケーションの保持期間が長くなり、サブスクリプションがパブリッシャーとのマージを試みる場合 (メタデータは既に削除されています)、サブスクリプションの有効期限は切れないため、リテンション値が増加します。 ただし、パブリッシャーにはサブスクライバーに変更をダウンロードするための十分なメタデータがないため、非コンバージエンスが生じる可能性があります。
メタデータのクリーンアップ
マージ レプリケーションでのメタデータのクリーンアップは、ストアド プロシージャ sp_mergemetadataretentioncleanupによって実行されます。 クリーンアップのタイミングは、パブリケーションの保持期間に基づいています。 マージ エージェントは、サブスクリプションが実行されるたびに、クリーンアップ プロシージャを呼び出します。 このプロシージャは、パブリケーションの保持期間より前のメタデータを次のシステム テーブルから削除します。
- MSmerge_contents
- MSmerge_tombstone
- MSmerge_genhistory
- MSmerge_current_partition_mappings
- MSmerge_past_partition_mappings
- MSmerge_generation_partition_mappings
これらのテーブルは、パブリケーション データベース内のすべてのパブリケーションで使用されます。複数のパブリケーションがある場合は、常に最長の保持期間を使用して、メタデータを削除できるタイミングを決定します。