マージ レプリケーションでサブスクリプションの有効期限とメタデータのクリーンアップを管理する方法

マージ パブリケーションのサブスクリプションは、パブリケーションの保有期間内にパブリッシャと同期されていない場合、有効期限切れになります。既定の保有期間は 14 日間です。この保有期間は、sp_addmergepublication (Transact-SQL)@retention パラメータと @retention_period_unit パラメータを使用して設定されます。@retention_period_unit では、パブリケーション互換性レベルを 90RTM 以上にすることが要求されます。Microsoft SQL Server の以前のバージョンを実行しているサブスクライバの場合、@retention_period_unit は常に 'day' に設定されます。互換性レベルの詳細については、「レプリケーション トポロジにおける複数バージョンの SQL Server の使用」の「マージ パブリケーションの互換性レベル」を参照してください。

有効期限切れになったサブスクリプションは、再初期化する必要があります。これは、サブスクリプションのメタデータが削除されるためです (詳細については、このトピックの「メタデータのクリーンアップ」を参照してください)。再初期化されていないサブスクリプションは、パブリッシャで実行される、有効期限が切れたサブスクリプションのクリーンアップ ジョブによって削除されます。既定では、このジョブは毎日実行されます。このジョブにより、パブリケーションの保有期間の 2 倍の期間にわたって同期されなかったすべてのプッシュ サブスクリプションが削除されます。例 :

  • パブリケーションの保有期間が 14 日間である場合、サブスクリプションは 14 日間の間に同期されなかった場合に期限切れになります。

    パブリッシャが SQL Server 2005 以降のバージョンを実行しており、サブスクリプションのエージェントが SQL Server 2005 以降のバージョンから実行されている場合、サブスクリプションのパーティション内のデータに変更があった場合にのみ、サブスクリプションが期限切れになります。たとえば、サブスクライバが、ドイツの顧客に関する顧客データのみを受信するとします。保有期間が 14 日間に設定されているとすると、最近 14 日間でドイツの顧客データに変更があった場合にのみ、このサブスクリプションは 14 日目に期限切れになります。

  • 最後の同期からの経過日数が 14 日から 27 日の間は、サブスクリプションを再初期化できます。

  • 最後の同期後 28 日目に、サブスクリプションは、有効期限が切れたサブスクリプションのクリーンアップ ジョブによって削除されます。プッシュ サブスクリプションの期限が切れた場合は完全に削除されますが、プル サブスクリプションの場合は削除されません。プル サブスクリプションは、サブスクライバでクリーンアップする必要があります。詳細については、「プル サブスクリプションを削除する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

パブリケーション保有期間の設定に関する注意点

マージ パブリケーションの保有期間を設定する場合は、以下の点に注意してください。

  • マージ レプリケーション メタデータのクリーンアップは、パブリケーション保有期間に依存します。

    • 保有期間が終了するまで、パブリケーションおよびサブスクリプション データベースでメタデータをクリーンアップすることはできません。レプリケーション パフォーマンスを低下させる可能性があるため、保有期間に大きな値を指定する際は注意してください。すべてのサブスクライバが保有期間内で定期的に同期されることを確実に予測できる場合は、小さい値を使用することをお勧めします。

    • サブスクリプションの期限が切れないように (@retention に値 0 を) 指定することは可能ですが、メタデータをクリーンアップできなくなるため、この値は使用しないことを強くお勧めします。

  • リパブリッシャの保有期間は、元のパブリッシャで設定されている保有期間以下の値に設定する必要があります。代替同期パートナーを使用する場合は、パブリッシャおよびすべての代替同期パートナーに同じパブリケーション保有期間の値を使用する必要があります。異なる値を使用すると、集約されなくなる可能性があります。パブリケーションの保有期間の値を変更する必要がある場合は、サブスクライバを再初期化して、データの未集約が発生しないようにします。

  • クリーンアップ後、パブリケーションの保有期間を延長し、既にメタデータを削除したパブリッシャとのマージをサブスクリプションが試行した場合、保有期間の値が増加しているため、そのサブスクリプションは期限切れになりません。ただし、パブリッシャには、サブスクライバに変更をダウンロードするための十分なメタデータが存在しないため、未集約が発生します。

メタデータのクリーンアップ

マージ レプリケーションでのメタデータのクリーンアップは、ストアド プロシージャ sp_mergemetadataretentioncleanup (Transact-SQL) によって実行されます。クリーンアップのタイミングは、パブリケーション保有期間に基づいています。マージ エージェントでサブスクリプションを実行するたびに、クリーンアップ プロシージャが呼び出されます。このプロシージャでは、パブリケーション保有期間よりも古いメタデータが、次のシステム テーブルから削除されます。

これらのテーブルは、パブリケーション データベースのすべてのパブリケーションによって使用されます。複数のパブリケーションが存在する場合は、最も長い保有期間を常に使用して、メタデータを削除するタイミングを判断します。