Wygaśnięcie subskrypcji i dezaktywacja

Dotyczy:SQL ServerAzure SQL Managed Instance

Subskrypcje można dezaktywować lub wygasać, jeśli nie są synchronizowane w określonym okresie przechowywania. Akcja, która występuje, zależy od typu replikacji i okresu przechowywania, który został przekroczony.

Aby ustawić okresy przechowywania, zobacz Ustawianie okresu wygaśnięcia dla subskrypcji, Ustawianie okresu przechowywania dystrybucji dla publikacji transakcyjnych (SQL Server Management Studio) i Konfigurowanie publikowania i dystrybucji.

Replikacja transakcyjna

Replikacja transakcyjna korzysta z maksymalnego okresu przechowywania dystrybucji (parametr @max_distretentionsp_adddistributiondb (Transact-SQL)) oraz okresu przechowywania publikacji (parametr @retentionsp_addpublication (Transact-SQL)):

  • Jeśli subskrypcja nie jest zsynchronizowana w ramach maksymalnego okresu retencji dystrybucji (domyślnie 72 godziny) i w bazie dystrybucji występują zmiany, które nie są dostarczane Subskrybentowi, subskrypcja jest oznaczana jako dezaktywowana przez zadanie czyszczenia wygasłej subskrypcji uruchamiane na dystrybutorze. Musisz ponownie zainicjować subskrypcję.

  • Jeśli subskrypcja nie zostanie zsynchronizowana w okresie przechowywania publikacji (domyślnie 336 godzin), subskrypcja wygasa i zostaje usunięta przez zadanie sprzątania wygasłych subskrypcji, które działa na Publisher. (Przed poprawką w KB4014798 zadanie nosiło nazwę Czyszczenie dystrybucji.) Musisz ponownie utworzyć i zsynchronizować subskrypcję.

    Jeśli subskrypcja push wygasa, jest całkowicie usuwana, ale subskrypcje pull już nie. Musisz wyczyścić subskrypcje typu pull u subskrybenta. Aby uzyskać więcej informacji, zobacz Usuwanie subskrypcji pull.

Replikacja scalająca

Replikacja scalania używa okresu przechowywania publikacji (@retention i @retention_period_unit parametrów sp_addmergepublication (Transact-SQL)). Gdy subskrypcja wygasa, musisz ją ponownie zainicjalizować, ponieważ proces usuwa metadane subskrypcji. Zadanie czyszczenia wygasłych subskrypcji, które działa na Publisher, usuwa subskrypcje, które nie zostały ponownie zaificjalizowane. Domyślnie zadanie jest uruchamiane codziennie. Usuwa wszystkie subskrypcje push, które nie są synchronizowane przez okres dwukrotnie dłuższy niż okres retencji publikacji. Przykład:

  • Jeśli publikacja ma okres przechowywania wynoszący 14 dni, subskrypcja może wygasnąć, jeśli nie zsynchronizuje się w ciągu 14 dni.

    Jeśli Publisher korzysta z SQL Server 2005 (9.x) lub nowszej wersji, a agent subskrypcji pochodzi z SQL Server 2005 (9.x) lub nowszej wersji, subskrypcja wygasa tylko wtedy, gdy nastąpią zmiany w danych partycji tej subskrypcji. Załóżmy na przykład, że subskrybent odbiera dane klientów tylko dla klientów w Niemczech. Jeśli okres przechowywania zostanie ustawiony na 14 dni, subskrypcja wygasa w dniu 14 tylko wtedy, gdy w ciągu ostatnich 14 dni nastąpiły zmiany w danych niemieckich klientów.

  • Od 14 do 27 dni po ostatniej synchronizacji możesz ponownie zainicjować subskrypcję.

  • Po 28 dniach od ostatniej synchronizacji, zadanie czyszczenia wygasłej subskrypcji powoduje rezygnację z subskrypcji. Jeśli subskrypcja push wygasa, jest całkowicie usuwana, ale subskrypcje pull już nie. Musisz wyczyścić subskrypcje typu pull u subskrybenta. Aby uzyskać więcej informacji, zobacz Usuwanie subskrypcji pull.

Rozważania dotyczące ustalenia okresu retencji publikacji dla publikacji po połączeniu

Podczas ustawiania okresu przechowywania dla publikacji scalania należy pamiętać o następujących kwestiach:

  • Okres przechowywania publikacji z połączenia obejmuje 24-godzinny okres karencji, aby dostosować się do subskrybentów w różnych strefach czasowych. Na przykład, jeśli ustalisz okres retencji na jeden dzień, rzeczywisty okres zatrzymania to 48 godzin.

  • Czyszczenie metadanych replikacji scalania zależy od okresu retencji publikacji:

    • Replikacja nie może wyczyścić metadanych w bazach danych publikacji i subskrypcji, dopóki okres przechowywania nie zostanie osiągnięty. Zachowaj ostrożność przy określaniu wysokiej wartości okresu retencyjnego, ponieważ może to negatywnie wpłynąć na wydajność replikacji. Użyj niższego ustawienia, jeśli możesz wiarygodnie przewidzieć, że wszyscy subskrybenci będą się regularnie synchronizować w tym czasie.

    • Możesz określić, że subskrypcje nigdy nie wygasają (wartość 0 dla @retention), ale nie używaj tej wartości, ponieważ metadanych nie da się wyczyścić.

  • Ustaw okres retencji dla dowolnego ponownego wydawcy na wartość równą lub mniejszą od okresu retencji ustawionego dla oryginalnego wydawcy. Również należy stosować te same wartości retencji publikacji dla wszystkich wydawców i ich alternatywnych partnerów synchronizacyjnych. Użycie różnych wartości może prowadzić do niezbieżności. Jeśli musisz zmienić wartość przechowywania publikacji, zresetuj subskrybenta, aby uniknąć niezbieżności danych.

  • Jeśli wydłużysz okres retencji publikacji po oczyszczeniu, a subskrypcja spróbuje scalić się z Publikatorem (który usunął już metadane), subskrypcja nie wygaśnie z powodu zwiększenia wartości retencji. Jednak Publisher nie ma wystarczającej ilości metadanych, by pobrać zmiany do Subskrybenta, co prowadzi do braku konwergencji.