Udostępnij za pośrednictwem


Sposób scalania replikacji śledzi i wylicza zmian

Po publikacja lub subskrypcja została zainicjowana, replikacja scalająca śledzi i wylicza wszystkie zmiany danych w tabelach opublikowane.Zmiany są śledzone za pomocą wyzwalaczy (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óry wskazuje, które zmiany powinny być propagowane.Podczas scalania Agent podczas synchronizacji, zmiany są wyliczane przez agenta, a następnie zastosowana do Wydawca i abonenta w razie potrzeby.

Śledzenie zmian

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

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

  • MSmerge_upd_<GUID>: Aktualizuj wyzwalacz

  • MSmerge_del_<GUID>: Usunięcie wyzwalacza

  • MSmerge_contents

  • MSmerge_tombstone

  • MSmerge_genhistory

Następujące dodatkowe używa replikacja scalania tabele systemowe do śledzenia zmian dla filtrowanych tabel:

  • MSmerge_partition_groups

  • MSmerge_current_partition_mappings

  • MSmerge_past_partition_mappings

Ostrzeżenie

Tabele systemowe wymienione są używane przez wszystkie 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.

Tabele niefiltrowanym śledzenia zmian

Tabele systemowe

Tabele systemowe używane dla tabel nieprzefiltrowane i przefiltrowane zawierają następujące metadane:

  • MSmerge_contents zawiera jeden wiersz dla każdego wiersza wstawiany lub aktualizowany w opublikowanej tabela 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 pokolenia.Generowanie jest kolekcja zmian, które są dostarczane do Wydawca lub abonenta.Pokoleń są zamknięte każdego czas uruchamia scalić agenta; późniejsze zmiany w bazie danych są dodawane do jednej lub więcej Otwórz pokoleń.

Proces śledzenia zmian

Wszystkie tabele niefiltrowanym służy śledzenie procesu następujących zmian:

  • Gdy insert lub update występuje na opublikowanych tabeli, MSmerge_ins_<GUID> lub MSmerge_upd_<GUID> wyzwolić pożarów, i zostanie wstawiona do MSmerge_contents tabela systemowa.Rowguid kolumna MSmerge_contents zawiera identyfikator GUID dla wstawionego lub zaktualizowane następnego wiersza, wskazująca, że czas synchronizacji, odpowiednie wstawione lub zaktualizowane wiersza w tabela użytkowników powinny być przesłane do Wydawca lub subskrybentów.Jeśli wystąpią kolejne aktualizacje w wierszu użytkownika tabela Wiersz w MSmerge_contents jest aktualizowany, aby odzwierciedlić.

  • Po wystąpieniu usunięcia tabeli opublikowane, MSmerge_del_<GUID> wyzwolić pożarów, i zostanie wstawiona do MSmerge_tombstone tabela systemowa.Rowguid kolumna MSmerge_tombstone zawiera identyfikator GUID dla usuniętego wiersza, wskazująca, że następny czas synchronizowania usunięcia powinny być przesłane do Wydawca lub subskrybentów dla odpowiedniego wiersza w tabela użytkowników usuwane.Jeśli usunięty wiersz jest wywoływany w MSmerge_contents (ponieważ została wstawiona lub zaktualizowana od czasu ostatniej synchronizacji), wiersz jest usuwany z MSmerge_contents.

Filtrowane tabele śledzenia zmian

Tabele systemowe

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

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

    • Zdefiniowane jawnie przy użyciu sp_addmergepartition lub Partycji danych strona w oknie dialogowym właściwości publikacji.

    • Automatycznie tworzone, gdy abonent synchronizuje Jeśli subskrybenta wymaga partycji, która jeszcze nie ma wpisu w MSmerge_partition_groups.

  • MSmerge_current_partition_mappings zawiera jeden wiersz dla każdej unikatowej kombinacji wierszy w MSmerge_contents i MSmerge_partition_groups.Na przykład, jeśli wiersz w tabela użytkownika należy do dwóch partycji i wiersz zostanie zaktualizowany, jeden wiersz jest wstawiany MSmerge_contents w celu odzwierciedlenia aktualizacji i dwa wiersze są wstawiane do MSmerge_current_partition_mappings, aby wskazać, że zaktualizowanych wierszy należy do dwóch partycji.

  • MSmerge_past_partition_mappings zawiera jeden wiersz dla każdego wiersza, w której już w danej partycji.Wiersz przenosi się z partycji, jeśli:

    • Skreśla się wiersz.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śli sparametryzowana filtr jest oparty na Państwo, w którym siedzibą firmy i przenosi firmy, wiersz firmy (i powiązane wiersze w innych tabelach) może przenieść z jednego sprzedaży osoby partycji danych do partycji dla innego sprzedawcę.Jeśli wiersz zostanie zaktualizowany, takie, że nie należy w partycji, wiersz jest wstawiany lub aktualizowany w MSmerge_contents i jeden lub więcej wierszy są wstawiane do MSmerge_past_partition_mappings.

Ostrzeżenie

Jeśli sasiadująco partycji z jednej subskrypcja na partycji (wartość 3 dla @ partition_options parametr sp_addmergearticle) są używane tabele systemowe MSmerge_current_partition_mappings i MSmerge_past_partition_mappings nie są używane do śledzenia wierszy partycji mapowania, ponieważ każdy wiersz należy tylko jedną partycję i mogą być zmieniane na tylko jeden abonenta.

Proces śledzenia zmian

Procesu opisanego powyżej (w sekcji "Zmiana śledzenia dla niefiltrowanym tabel") dla tabel niefiltrowanym jest także używana dla filtrowanych tabel, z następujących dodatków:

  • Gdy wstawkę wystąpi na opublikowanych tabela, dodatkowo do danych jest aktualizowany lub umieszczany w MSmerge_contents, mapowanie partycji jest dodawany do MSmerge_current_partition_mappings dla każdej partycji, na której wiersz.

  • Podczas aktualizacji występuje na opublikowanych tabela, dodatkowo do danych jest aktualizowany lub umieszczany w MSmerge_contents, jeżeli mapowanie partycji nie istnieje w MSmerge_current_partition_mappings dla każdej partycji, której należy wiersz dodaniu.Jeśli aktualizacja spowodowało przenoszone z jednej partycji do innego wiersza, wiersz jest aktualizowane w MSmerge_current_partition_mappings i dodaniu do MSmerge_past_partition_mappings.

  • Gdy usunięcia wystąpi na opublikowanych tabela, dodatkowo do wiersza dodaje się do MSmerge_tombstone, skreśla się wiersz MSmerge_current_partition_mappings i dodaniu do MSmerge_past_partition_mappings.

Wyliczanie zmiany

Tabele systemowe i procedury

Podczas scalania agenta, zmiany są wyliczane z liczby tabele systemowe i procedury przechowywane:

  • MSmerge_genhistory zawiera jeden wiersz dla każdego pokolenia.Generowanie jest kolekcja zmian, które są dostarczane do Wydawca lub abonenta.Pokoleń są zamknięte każdego czas uruchamia scalić agenta; późniejsze zmiany w bazie danych są dodawane do jednej lub więcej Otwórz pokoleń.

  • sysmergesubscriptions zawiera informacje dotyczące subskrypcji, łącznie z rekordu pokoleń ostatniej zmiany węzła została wysłana i odebrana.W bazie danych publikacja, ta tabela zawiera wiersz dla Wydawca i jeden wiersz dla każdego subskrybenta.W baza danych subskrypcja, tabela ta zazwyczaj zawiera wiersz subskrybenta i wiersz wydawcy.

  • MSmerge_generation_partition_mappings jest używany tylko dla tabel przefiltrowane, nagrywanie, czy dany generacji zawiera wszelkie zmiany, które są istotne dla danej partycji.W tej tabela w baza danych publikacja zawiera jeden wiersz dla każdej unikatowej kombinacji wierszy w MSmerge_genhistory i MSmerge_partition_groups.

  • sp_MSmakegeneration zamyka wszystkie otwarte pokoleń na początku procesu wyliczania.

  • sp_MSenumchanges wylicza zmian dla tabel (liczba powiązane procedury, które mają nazwy począwszy od sp_MSenumchanges są również używane w tym procesie).

  • sp_MSgetmetadata Określa, czy zmiana z jednego węzła powinny być stosowane w innym węźle jako insert, update lub delete.

Proces zmiany wyliczania

Podczas wyliczania zmiana realizowany jest następujący proces:

  1. Procedura systemu sp_MSmakegeneration nosi nazwę:

    • Dla tabel nieprzefiltrowane i przefiltrowane tej procedury powoduje zamknięcie wszystkich otwartych pokoleń, do którego odwołuje się MSmerge_genhistory (zamknięte pokoleń mają wartość 1 lub 2 kolumna genstatus).

    • Filtrowane tabel, procedura ta wypełnia tabela systemowa MSmerge_generation_partition_mappings.Jeśli pokolenia zawiera jeden lub więcej zmian, które są istotne dla partycji, wiersz jest wstawiany do tabela systemowa.Jeśli pokolenia nie zawiera żadnych zmian, które są istotne dla danej partycji, nie jest wstawiany wiersz MSmerge_generation_partition_mappings, a zmiany nie są wyliczane dla żadnych subskrybentów, które odbierają tej partycji.

  2. procedura składowana sp_MSenumchanges i inne powiązane procedury są nazywane.Procedury te wyliczyć zmian, które nastąpiły od czasu ostatniego czas wystąpił synchronizacji:

    1. Procedury najpierw określić generowanie przy której rozpoczyna się wyliczenia, oparte na kolumnach sentgen (wysłane ostatniej generacji) i recgen (ostatniej generacji odebrane) w tabela sysmergesubscriptions.

      Na przykład podczas określania, które pokoleń zmiany należy wyliczyć abonenta danego sentgen dla subskrybenta (przechowywane w bazie danych publikacja) oraz recgen subskrybenta (przechowywane w baza danych subskrypcja) są porównywane.Jeśli wartości są takie same (która wskazuje ostatniej generacji wysyłane z Wydawca został pomyślnie odebrany przez abonenta), 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żywany do zapewnienia wszystkich wymaganych zmian są wysyłane.

    2. Procedury wyliczyć następnie zmiany:

      Dla tabel niefiltrowanym wszystkie zmiany zawarte w pokoleniach generacji w sentgen lub recgen wyliczane są: MSmerge_genhistory jest przyłączony do MSmerge_contents i MSmerge_tombstone do określenia, jakie zmiany muszą być wysyłane.

      Filtrowane tabel MSmerge_generation_partition_mappings jest przyłączony do: MSmerge_current_partition_mappings i MSmerge_contents; i MSmerge_past_partition_mappings i MSmerge_tombstone do określenia, które zmiany są istotne dla partycji, który odbiera subskrybenta.

  3. procedura składowana sp_MSgetmetadata nazywa się do ustalenia, czy zmiany powinny być stosowane jako Wstaw, zaktualizować lub usunąć.W tym momencie wykrywanie konfliktów i rozdzielczości są wykonywane; Aby uzyskać więcej informacji, zobacz Jak replikacji scalania wykrywa i usuwa konflikty.