サブスクリプションは、非アクティブ化することも、指定した 保有期間内に同期されていない場合は期限切れになる可能性があります。 発生するアクションは、レプリケーションの種類と、超過した保有期間によって異なります。
保持期間を設定するには、「 サブスクリプションの有効期限の設定」、 トランザクション パブリケーションのディストリビューションの保持期間の設定 (SQL Server Management Studio)、 および発行と配布の構成に関するページを参照してください。
トランザクション レプリケーション
トランザクション レプリケーションでは、ディストリビューションの最大リテンション期間 (sp_adddistributiondb (Transact-SQL) の@max_distretention パラメーター) とパブリケーションの保持期間 (sp_addpublication の @retention パラメーター (Transact-SQL) が使用されます)。
ディストリビューションの最大保有期間 (既定値は 72 時間) 内にサブスクリプションが同期されておらず、サブスクライバーに配信されていないディストリビューション データベースに変更がある場合、ディストリビューターで実行される ディストリビューション クリーンアップ ジョブによってサブスクリプションは非アクティブ化済みとしてマークされます。 サブスクリプションを再初期化する必要があります。
パブリケーションの保有期間内 (既定値は 336 時間) にサブスクリプションが同期されていない場合、サブスクリプションは有効期限が切れ、パブリッシャーで実行 される期限切れのサブスクリプション クリーンアップ ジョブによって削除されます。 サブスクリプションを再作成して同期する必要があります。
プッシュ サブスクリプションの有効期限が切れると、完全に削除されますが、プル サブスクリプションは削除されません。 サブスクライバーでプルサブスクリプションを整理する必要があります。 詳細については、「 プル サブスクリプションの削除」を参照してください。
マージ レプリケーション
マージ レプリケーションでは、パブリケーションの保持期間 (sp_addmergepublication (Transact-SQL) の@retentionパラメーターと@retention_period_unit パラメーター) が使用されます。 サブスクリプションのメタデータが削除されるため、サブスクリプションの有効期限が切れた場合は、サブスクリプションを再初期化する必要があります。 再初期化されていないサブスクリプションは、パブリッシャーで実行される 期限切れのサブスクリプション クリーンアップ ジョブによって削除されます。 既定では、このジョブは毎日実行されます。パブリケーションの保持期間の 2 倍の長さで同期されていないすべてのプッシュ サブスクリプションが削除されます。 例えば次が挙げられます。
パブリケーションの保有期間が 14 日間の場合、サブスクリプションは 14 日以内に同期されていない場合に期限切れになる可能性があります。
パブリッシャーが SQL Server 2005 以降のバージョンを実行していて、サブスクリプションのエージェントが SQL Server 2005 以降のバージョンの場合、サブスクリプションは、そのサブスクリプションのパーティション内のデータに変更があった場合にのみ有効期限が切れます。 たとえば、サブスクライバーがドイツの顧客に対してのみ顧客データを受け取ったとします。 保有期間が 14 日に設定されている場合、サブスクリプションは、過去 14 日間にドイツの顧客データに変更があった場合にのみ、14 日目に有効期限が切れます。
最後の同期から 14 日から 27 日後まで、サブスクリプションを再初期化できます。
最後の同期から 28 日後に、 期限切れのサブスクリプションクリーンアップ ジョブによってサブスクリプションが削除されます 。 プッシュ サブスクリプションの有効期限が切れると、完全に削除されますが、プル サブスクリプションは削除されません。 サブスクライバーでプル サブスクリプションをクリーンアップする必要があります。 詳細については、「 プル サブスクリプションの削除」を参照してください。
マージ パブリケーションのパブリケーション保有期間の設定に関する考慮事項
マージ パブリケーションの保持期間を設定する場合は、次の点に注意してください。
マージ パブリケーションの保持期間には、サブスクライバーが異なるタイム ゾーンに対応するために 24 時間の猶予期間があります。 たとえば、保持期間を 1 日に設定した場合、実際の保有期間は 48 時間になります。
マージ レプリケーション メタデータのクリーンアップは、パブリケーションの保持期間によって異なります。
レプリケーションでは、保有期間に達するまで、パブリケーション データベースとサブスクリプション データベースのメタデータをクリーンアップできません。 リテンション期間に高い値を指定する場合は、レプリケーションのパフォーマンスに悪影響を与える可能性があるため、注意が必要です。 すべてのサブスクライバーがその期間内に定期的に同期することを確実に予測できる場合は、低い設定を使用することをお勧めします。
サブスクリプションの有効期限が切れない ( @retentionの場合は値 0) を指定できますが、メタデータをクリーンアップできないため、この値を使用しないことを強くお勧めします。
リパブリッシャーのリテンション期間は、元のパブリッシャーで設定された保持期間以下の値に設定する必要があります。 また、すべてのパブリッシャーとその代替同期パートナーに同じパブリケーション保持値を使用する必要があります。 異なる値を使用すると、非収束につながる可能性があります。 パブリケーションのリテンション期間の値を変更する必要がある場合は、データの非収束を回避するためにサブスクライバーを再初期化します。
クリーンアップ後にパブリケーションの保持期間が長くなり、サブスクリプションがパブリッシャーとのマージを試みる場合 (メタデータは既に削除されています)、サブスクリプションの有効期限は切れなくなります。これは、リテンション値が増加するためです。 ただ、パブリッシャーにはサブスクライバーへの変更のダウンロードに必要なメタデータが不足しているため、データの同期がうまくいかない可能性があります。