Udostępnij za pośrednictwem


W jaki sposób replikacja łączenia ścieżki i wylicza zmiany

Po publikacja lub subskrypcja została zainicjowana replikacja łączenia śledzi i wylicza wszystkie zmiany wprowadzone w danych przechowywanych w tabelach opublikowane.Zmiany są śledzone przez wyzwalacze (których replikacja tworzy dla każdej tabela opublikowanych) i tabele systemowe w bazach danych publikacja i subskrypcja.Te tabele systemowe replikacja są wypełniane metadane, która wskazuje, jakie zmiany powinny być propagowane.Podczas scalania Agent podczas synchronizacji, zmiany są wyliczane przez agenta i następnie stosowana do Wydawca i subskrybent w razie potrzeby.

Śledzenie zmian

replikacja łączenia używa następujących wyzwalaczy i tabele systemowe do śledzenia zmian dla wszystkich opublikowanych tabel:

  • MSmerge_ins_<IDENTYFIKATOR GUID>: Wstaw wyzwalacz (wartość identyfikatora GUID dla tego i innych wyzwalaczy jest pochodną sysmergearticles)

  • MSmerge_upd_<IDENTYFIKATOR GUID>: Aktualizowanie wyzwalacza

  • MSmerge_del_<IDENTYFIKATOR GUID>: Usuwanie wyzwalacza

  • MSmerge_contents

  • MSmerge_tombstone

  • MSmerge_genhistory

replikacja łączenia używa następujących dodatkowych tabele systemowe do śledzenia zmian dla tabel filtrowane:

  • MSmerge_partition_groups

  • MSmerge_current_partition_mappings

  • MSmerge_past_partition_mappings

Uwaga

Tabele systemowe, na liście są używane przez wszystkich korespondencji seryjnej publikacje i subskrypcje w bazie danych, na przykład, jeśli masz więcej niż jedną publikacja w baza danych publikacja, MSmerge_contents zawiera wiersze z artykułów wszystkich publikacjach.

Zmienianie śledzenia niefiltrowanym tabel

Tabele systemowe

Tabele systemowe, używanej przez tabele niefiltrowanym i filtrowane zawiera następujące metadane:

  • MSmerge_contents zawiera jeden wiersz dla każdego wiersza, wstawione lub zaktualizowane w tabela opublikowanego w bazie danych.

  • MSmerge_tombstone zawiera jeden wiersz dla każdego wiersza usunięte z tabela opublikowanego w bazie danych.

  • MSmerge_genhistory zawiera jeden wiersz dla każdego generacji.Do generacji jest kolekcją zmiany, która jest dostarczana do Wydawca lub subskrybent.Są generacji zamknięte przy każdym Agent korespondencji seryjnej działa; kolejnych zmian w bazie danych są dodawane do jednego lub kilku Otwórz generacji.

Proces śledzenia zmian

Śledzenie procesu następujących zmian jest używana dla wszystkich tabel niefiltrowanym:

  • Podczas aktualizacji lub wstawienia pojawia się na opublikowanej tabeli, MSmerge_ins_<IDENTYFIKATOR GUID> lub MSmerge_upd_<IDENTYFIKATOR GUID> uruchamiany, uruchamiać i wiersza jest wstawiany do MSmerge_contents tabela systemowa. The rowguid kolumna of MSmerge_contents contains the GUID for the inserted or updated row, indicating that the next czas synchronization occurs, the corresponding inserted or updated row in the user tabela should be sent to the Wydawca or Subscribers.Jeśli w wierszu tabela użytkownika wiersza w kolejnych aktualizacji MSmerge_contents zostanie zaktualizowany tak, aby odzwierciedlić to.

  • W przypadku usunięcia wystąpienia na opublikowaną tabeli, MSmerge_del_<IDENTYFIKATOR GUID> uruchamiany, uruchamiać i wiersza jest wstawiany do MSmerge_tombstone tabela systemowa. The rowguid kolumna of MSmerge_tombstone contains the GUID for the deleted row, indicating that the next czas synchronization occurs, a delete should be sent to the Wydawca or Subscribers for the corresponding deleted row in the user tabela.Jeśli odwołuje się do usuniętego wiersza MSmerge_contents (ponieważ została wstawiona lub zaktualizowana od czasu ostatniej synchronizacji), wiersz zostanie usunięty z MSmerge_contents.

Zmienianie śledzenia dla filtrowanych tabele

Tabele systemowe

Oprócz tabele systemowe opisany w poprzedniej sekcji, trzy tabele w bazie danych publikacja zawiera metadane śledzenie zmienia się na filtrowanej tabel:

  • MSmerge_partition_groups zawiera jeden wiersz dla każdej partycji, która jest zdefiniowana w publikacja.Partycje mogą być:

    • Zdefiniowane jawnie przy użyciu sp_addmergepartition or the Partycje danych strona w oknie dialogowym właściwości publikacja.

    • Tworzone automatycznie podczas synchronizowania subskrybent, jeśli subskrybent wymaga partycji, która jeszcze nie ma wpisu MSmerge_partition_groups.

  • MSmerge_current_partition_mappings zawiera jeden wiersz dla każdej kombinacji unikatowych wierszy w MSmerge_contents and MSmerge_partition_groups.Na przykład jeśli wiersz w tabela użytkownik należy do dwie partycje, a wiersz zostanie zaktualizowany, jeden wiersz jest wstawiany do MSmerge_contents w celu uwzględnienia aktualizacji i dwa wiersze są wstawiane do MSmerge_current_partition_mappings, aby wskazać, że zaktualizowanych wierszy należy do dwie partycje.

  • MSmerge_past_partition_mappings zawiera jeden wiersz dla każdego wiersza, która należy już w danej partycji.Jeśli wiersz przenosi się z partycji:

    • Wiersz jest usuwany.Usunięcie wiersza z tabela użytkowników zostanie wstawiony wiersz MSmerge_tombstone i jeden lub więcej wierszy są wstawiane do MSmerge_past_partition_mappings.

    • Zmieniona wartość kolumna używane do filtrowania.Na przykład jeżeli sparametryzowana filtr jest oparty na stanie, w którym jest siedzibą firmy i przenosi firmy, wiersza dla firmy (i powiązane wiersze w innych tabelach) może przenieść z jednego sprzedaży osoby partycji danych do partycji dla innego sprzedawcy.Jeśli wiersz został zaktualizowany w taki sposób, że należy ono już w partycji, wiersz jest wstawiany lub aktualizowany w MSmerge_contents i jeden lub więcej wierszy są wstawiane do MSmerge_past_partition_mappings.

Uwaga

Jeśli nonoverlapping partycji z jednym subskrypcja na partycji (wartość 3 for the @ partition_options parametrsp_addmergearticle) są używane, system tabel MSmerge_current_partition_mappings and MSmerge_past_partition_mappings nie są używane do śledzenia wierszy mapowania partycji, ponieważ każdy wiersz należy do tylko jednej partycji i może zostać zmieniona na tylko jeden subskrybent.

Proces śledzenia zmian

Opisanego powyżej (w sekcji "Zmień śledzenia dla niefiltrowanym tabel „) dla tabel niefiltrowanym jest także używana dla filtrowanych tabel z następujących dodatków:

  • Gdy wystąpi wstawiania tabela opublikowane, oprócz danych jest aktualizowany lub umieszczany w MSmerge_contents, mapowanie partycji jest dodawany do MSmerge_current_partition_mappings dla każdej partycji, której należy wiersz.

  • Gdy wystąpi aktualizacji na opublikowaną tabela, oprócz danych jest aktualizowany lub umieszczany w MSmerge_contents, jeżeli mapowanie partycja nie istnieje w MSmerge_current_partition_mappings dla każdej partycji, której należy wiersz dodaniu.Jeśli aktualizacja w wierszu zostanie przeniesiony z jedną partycję na inny, wiersz jest aktualizowany w MSmerge_current_partition_mappings , a drugi jest dodawany do MSmerge_past_partition_mappings.

  • Gdy wystąpi usunięcia opublikowanego tabela, wraz z wiersza jest wstawiany do MSmerge_tombstone, wiersz zostanie usunięty z MSmerge_current_partition_mappings , a drugi jest dodawany do MSmerge_past_partition_mappings.

Wyliczenie zmiany

Tabele systemowe i procedury

Jeżeli jest uruchomiony agent korespondencji seryjnej, zmiany są wyliczane korzystanie z wielu tabele systemowe i procedur przechowywanych:

  • MSmerge_genhistory zawiera jeden wiersz dla każdego generacji.Do generacji jest kolekcją zmiany, która jest dostarczana do Wydawca lub subskrybent.Są generacji zamknięte przy każdym Agent korespondencji seryjnej działa; kolejnych zmian w bazie danych są dodawane do jednego lub kilku Otwórz generacji.

  • sysmergesubscriptions zawiera informacje o subskrypcji, w tym rekordzie generacji ostatniej zmiany węzeł ma być wysłana i odebrana.W baza danych publikacja, ta tabela zawiera wiersz Wydawca i jeden wiersz dla każdego subskrybent.W baza danych subskrypcja, tabela ta zazwyczaj zawiera wiersz dla subskrybent oraz wiersz Wydawca.

  • MSmerge_generation_partition_mappings jest używany tylko dla tabel filtrowane, rejestrowanie, czy dany generowania zawiera wszystkie zmiany, które są odpowiednie dla danej partycji.W tej tabela w baza danych publikacji zawiera jeden wiersz dla każdej kombinacji unikatowych wierszy MSmerge_genhistory and MSmerge_partition_groups.

  • sp_MSmakegeneration powoduje zamknięcie wszystkich otwartych generacji na początku procesu wyliczenia.

  • sp_MSenumchanges wylicza zmian dla tabel (pewną liczbę powiązanych procedur, których nazwy zaczynający sp_MSenumchanges są także używane w tym procesie).

  • sp_MSgetmetadata Określa, czy zmiana z jednym z węzłów należy stosować w innym węźle jako wstawiania, aktualizacji lub usuwania.

Zmiana wyliczania procesów

Podczas wyliczania zmiana występuje w następujący sposób:

  1. Procedura systemu sp_MSmakegeneration jest nazywany:

    • Niefiltrowanym i filtrowane tabel procedura ta powoduje zamknięcie wszystkich otwartych generacji, do którego odwołuje się MSmerge_genhistory (zamknięte generacji mają wartość 1 or 2 kolumna genstatus).

    • Filtrowane tabel tej procedury spowoduje wypełnienie tabela systemowa MSmerge_generation_partition_mappings.Jeśli do generacji zawiera jeden lub więcej zmian, które są istotne dla partycji, wiersz jest wstawiany do tabela systemowa.Jeśli do generacji nie zawiera żadnych zmian, które są odpowiednie dla danej partycji, nie zostanie wstawiony wiersz MSmerge_generation_partition_mappings, a zmiany nie są wyliczane dla wszystkich subskrybentów odbierające tej partycji.

  2. Procedura przechowywana sp_MSenumchanges i procedur pokrewnych są nazywane.Procedury te wyliczyć zmiany, które miały miejsce od czas ostatniej synchronizacji czas wystąpił:

    1. Procedury najpierw określić generowania, na którym jest uruchamiana wyliczenia, oparte na kolumnach sentgen (ostatni generowania wysłanych) i recgen (ostatni generowania odebrane) w tabela sysmergesubscriptions.

      Na przykład, przy określaniu zmiany które generacji musi można wyliczyć danego abonenta, sentgen dla subskrybent (przechowywanych w baza danych publikacja) i recgen dla subskrybent (przechowywanych w bazie danych subskrypcja) są porównywane.Jeśli wartości są takie same (co oznacza, że ostatni generowanie wysłanych od Wydawca pomyślnie została odebrana przez subskrybent), zmiany są wyliczane, począwszy od następnej generacji w MSmerge_genhistory.Jeśli wartości nie są takie same, niższej z dwóch wartości jest używana do zapewnienia wszystkie wymagane są wysyłane.

    2. Procedury wyliczyć następnie zmiany:

      W przypadku tabel niefiltrowanym, wszystkie zmiany zawarte w generacji po wytwarzania w sentgen or recgen są wyliczane: MSmerge_genhistory jest dołączanaMSmerge_contents and MSmerge_tombstone, aby ustalić, jakie zmiany muszą być wysyłane.

      Filtrowane tabel MSmerge_generation_partition_mappings jest dołączony do: MSmerge_current_partition_mappings and MSmerge_contents; and MSmerge_past_partition_mappings and MSmerge_tombstone , aby ustalić, jakie zmiany są odpowiednie dla partycji, która odbiera subskrybent.

  3. Procedura przechowywana sp_MSgetmetadata nazywa się do określenia, czy zmiany powinny być stosowane jako wstawiania, aktualizacji lub usuwania.Na tym etapie wykrywanie konfliktów i rozdzielczości ekranu są wykonywane; Aby uzyskać więcej informacji, zobacz Jak replikacja łączenia wykrywa i usuwa konflikty.