Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wewnętrzne elementy replikacji transakcyjnej programu SQL Server

Replikacja transakcyjna programu SQL Server jest jedną z najczęstszych technik replikacji używanych do udostępniania, kopiowania lub dystrybucji danych do wielu miejsc docelowych. W tym artykule omówimy replikację, różne typy replikacji i zwrócimy szczególną uwagę na pracę replikacji transakcyjnej.

Co to jest replikacja transakcyjna SQL?

Replikacja to technologia SQL Server służąca do kopiowania lub dystrybucji danych z jednej bazy danych do drugiej przy zachowaniu spójności danych.

Replikacja może być używana do przesyłania danych z jednej bazy danych do drugiej

  • w tej samej instancji lub innej instancji na tym samym serwerze;
  • lub na serwerach w jednej lokalizacji lub wielu lokalizacjach.

Najpierw powinniśmy przejść przez architekturę replikacji i zrozumieć terminologię replikacji.

Architektura i terminologia replikacji serwera SQL

  • Wydawca to instancja źródłowej bazy danych, która publikuje zmiany danych, które można dystrybuować do innej bazy danych. Dane od jednego wydawcy można wysłać do pojedynczego subskrybenta lub wielu subskrybentów .
  • Subskrybent to Docelowa Instancja Bazy Danych, w której dystrybuujemy zmiany danych przechwycone z Bazy Danych Wydawcy. Subskrybent może być instancją wydawcy lub inną instancją na serwerze wydawcy/innym serwerze w tej samej lokalizacji/odległej lokalizacji. Zanim zmiany danych zostaną rozesłane do instancji bazy danych subskrybenta, dane te są przechowywane w Dystrybutorze .
  • Dystrybutor to baza danych, która przechowuje dzienniki zmian przechwycone z baz danych Publishera. Gdy serwer jest włączony jako dystrybutor, utworzy systemową bazę danych o nazwie baza danych dystrybucji .

Na podstawie lokalizacji baz danych dystrybucji można ich sklasyfikować jako dystrybutorów lokalnych lub zdalnych.

Lokalny dystrybutor to dystrybucyjna baza danych znajdująca się w wystąpieniu bazy danych Publisher.
Zdalny dystrybutor to dystrybucyjna baza danych znajdująca się w instancji bazy danych Subskrybenta lub w dowolnej innej instancji SQL Server poza instancją bazy danych Publisher.

Decydującym czynnikiem jest miejsce umieszczenia bazy danych Distribution w wystąpieniu programu Publisher (innym wystąpieniu). zależy to od zasobów serwera dostępnych do obsługi obciążenia dystrybucji danych.

Zgodnie ze sposobem, w jaki dane będą wysyłane z bazy danych Dystrybucja do instancji Subskrybenta, można je podzielić na Push lub Wyciągnij subskrypcje .

Subskrypcja wypychana oznacza, że ​​baza danych dystrybucji bierze odpowiedzialność za wypchnięcie danych do wystąpienia bazy danych subskrybenta.
Subskrypcja ściągana oznacza, że ​​instancja bazy danych Subskrybentów bierze odpowiedzialność za pobranie dostępnych danych z bazy danych Dystrybucji i zastosowanie ich do bazy danych Subskrybentów.

  • Artykuły są podstawową jednostką replikacji. Wskazuje wszelkie zmiany danych w tym obiekcie bazy danych lub artykule, które zostaną zreplikowane od wydawcy do subskrybenta. Artykuł może być tabelą, widokiem, widokiem indeksowanym, procedurą przechowywaną lub funkcją zdefiniowaną przez użytkownika.
  • Publikacje to zbiór jednego lub więcej artykułów z bazy danych w Publisher.
  • Subskrypcja określa jakie Publikacje zostaną odebrane. Określa również, z jakiej publikacji i według jakiego harmonogramu dane są replikowane. Subskrypcja może być typu Push lub Pull (od publikacji do subskrypcji).
  • Agenci replikacji to samodzielne programy odpowiedzialne za śledzenie zmian i dystrybucję danych od Wydawcy do Dystrybutora i Abonenta. Wszyscy agenci replikacji wykonują jako zadania w programie SQL Server Agent. W ten sposób można nim administrować za pośrednictwem SSMS w ramach zadań SQL Server Agent Jobs lub Replication Monitor. Dostępne są następujące typy agentów replikacji:
  • Agent migawek – Używany przez prawie wszystkie typy replikacji. Snapshot Agent jest uruchamiany z serwera przechowującego bazę danych dystrybucji. Przygotowuje Schemat i dane wstępne wszystkich Artykułów zawartych w Publikacji na Wydawcy. Ponadto tworzy pliki migawek w folderze migawek i rejestruje szczegóły synchronizacji w bazie danych dystrybucji.
  • Agent czytnika dzienników – Używany przez replikację transakcyjną. Celem jest odczytanie zmian danych artykułów włączonych do replikacji z dzienników transakcji bazy danych wydawcy i przechowywanych w bazie danych dystrybucji. Agent czytnika dzienników działa z serwera dystrybutora.
  • Agent dystrybucyjny – Używany przez replikację transakcyjną i migawkową. Stosuje początkowe pliki migawek i przyrostowe lub dostępne transakcje oczekujące z bazy danych dystrybucji do bazy danych subskrybenta. Agent dystrybucji działa z serwera dystrybutora dla subskrypcji wypychanych i serwera subskrybenta dla subskrypcji ściąganych.
  • Połącz agenta – Używany tylko przez replikację scalającą. Stosuje początkowe pliki migawek i uzgadnianie różnicowych lub przyrostowych zmian w obrębie wydawcy lub subskrybenta. Agent scalania działa na serwerze dystrybutora w przypadku replikacji wypychanej i na serwerze subskrybenta w przypadku subskrypcji ściąganych.
  • Agent czytnika kolejki – Agent czytnika kolejki jest używany przez replikację transakcyjną z opcją aktualizacji w kolejce. Przenosi zmiany od subskrybenta do wydawcy. Agent czytnika kolejki działa z serwera dystrybutora.
  • Zadania konserwacji replikacji – Jak wyjaśniono wcześniej, wszystkie agenty replikacji są samodzielnymi programami skonfigurowanymi podczas konfigurowania replikacji. Działają jako zadania w ramach zadań SQL Server Agent. Niewiele znaczących zadań, na które należy zwrócić uwagę, to czyszczenie dystrybucji:dystrybucja, czyszczenie historii agentów:dystrybucja i czyszczenie wygasłej subskrypcji.

Rodzaje replikacji w serwerze SQL

Teraz, gdy znamy terminologię, przejdźmy do typów replikacji.

  1. Replikacja transakcyjna . Jak sama nazwa wskazuje, każda transakcja lub zmiana danych w zakresie transakcyjnym na Wydawcy zostanie wysłana do Abonenta w czasie zbliżonym do rzeczywistego z niewielkimi opóźnieniami zależnymi od przepustowości sieci i zasobów serwera. Replikacja transakcyjna używa agenta czytnika dzienników do odczytywania zmian danych z dzienników transakcyjnych bazy danych wydawcy. Używa również agenta dystrybucji, aby zastosować zmiany do subskrybenta. Czasami może użyć Snapshot Agent do pobrania początkowych danych Snapshot wszystkich zreplikowanych artykułów. Publikacja replikacji transakcyjnej może należeć do następujących kategorii:
    • Standardowa replikacja transakcyjna – Subskrybent to baza danych tylko do odczytu z perspektywy replikacji transakcyjnej. Wszelkie zmiany dokonane przez kogokolwiek w bazie danych subskrybentów nie będą śledzone i aktualizowane w bazie danych wydawców. Standardowa replikacja transakcyjna jest często określana jako replikacja transakcyjna.
    • Replikacja transakcyjna z subskrypcjami, które można aktualizować to ulepszenie standardowej replikacji transakcyjnej, które śledzi zmiany danych zachodzące w subskrybentach. Za każdym razem, gdy zmiany danych zostaną zainicjowane w ramach subskrypcji z możliwością aktualizacji, zostaną one najpierw rozesłane do Wydawcy, a następnie do innych subskrybentów.
    • Replikacja peer-to-peer jest ulepszeniem standardowej replikacji transakcyjnej. Propaguje spójne transakcyjnie zmiany w czasie zbliżonym do rzeczywistego w wielu instancjach serwera.
    • Replikacja dwukierunkowa jest ulepszeniem standardowej replikacji transakcyjnej, które pozwala dwóm serwerom (ograniczenie do tylko 2 serwerów i stąd nazwane dwukierunkowe) wymieniać między sobą zmiany danych z dowolnym serwerem działającym jako wydawca (w celu wysyłania zmian do innego serwera) lub jako subskrybent (aby otrzymywać zmiany z innego serwera).
  2. Replikacja scalająca – Obsługuje przechwytywanie zmian danych, które mają miejsce zarówno u wydawcy, jak i subskrybenta, i dystrybuuje je na inny serwer. Replikacja scalająca wymaga ROWGUID kolumna w artykułach tabeli biorących udział w replikacji scalającej. Używa wyzwalaczy do przechwytywania zmian danych między wydawcą i subskrybentem. Ponadto dostarcza zmiany na serwery, gdy zarówno wydawca, jak i subskrybent są połączeni z siecią. Replikacja scalająca używa agenta scalania do replikowania zmian danych między wydawcą i subskrybentem.
  3. Replikacja migawek – Jak sama nazwa wskazuje, Snapshot Replication nie opiera się na dziennikach transakcyjnych ani wyzwalaczach do przechwytywania zmian. Wykonuje migawkę artykułów zaangażowanych w publikację i stosuje ją do subskrybenta z rekordami dostępnymi w momencie tworzenia migawki. Replikacja migawki używa agenta migawki, aby wykonać migawkę wydawcy i używa agenta dystrybucji, aby zastosować te rekordy do subskrybenta.

Replikacja transakcyjna serwera SQL

Replikacja transakcyjna jest zwykle preferowana w scenariuszach, w których baza danych OLTP Publisher ma intensywne działania INSERT/UPDATE i/lub DELETE.

Ponieważ instancja serwera wydawcy ma ogromne działanie we/wy DISK, generowanie raportów może powodować poważne blokady. Może to również wpłynąć na wydajność serwera. Dlatego inny serwer z danymi w czasie zbliżonym do rzeczywistego jest dobry do odciążenia wymagań raportowania.

Jednym z podstawowych wymagań replikacji transakcyjnej jest to, że replikowane tabele powinny mieć dostępny klucz podstawowy.

Możemy podsumować, jak działa replikacja transakcyjna. Spójrz na poniższy diagram architektury replikacji transakcyjnej zaczerpnięty z oficjalnej dokumentacji firmy Microsoft.

Publikacja jest tworzona w bazie danych Wydawcy, która zawiera listę artykułów do replikacji do bazy danych Subskrybentów.

Replikacja transakcyjna jest zwykle inicjowana od wydawcy do dystrybutora za pośrednictwem agenta migawki lub pełnych kopii zapasowych. Snapshot Agent jest obsługiwany przez Kreatora konfiguracji replikacji. Pełna kopia zapasowa jest obsługiwana przez instrukcje TSQL w celu zainicjowania replikacji transakcyjnej.

Agent czytnika dzienników skanuje dziennik transakcyjny bazy danych wydawcy w poszukiwaniu śledzonych artykułów. Następnie kopiuje zmiany danych z dziennika transakcji do bazy danych dystrybucji.

Baza danych Dystrybucja może znajdować się w Wydawca lub Subskrybent; może to być również inna niezależna instancja SQL Server.

Zwróć także uwagę na następujące rzeczy:

  • Agent czytnika dzienników działa w sposób ciągły z serwera dystrybutora w celu skanowania w poszukiwaniu nowych poleceń oznaczonych jako replikacja. Jeśli jednak nie chcesz działać w sposób ciągły, a zamiast tego chcesz działać zgodnie z harmonogramem, możemy zmienić zadanie SQL Agent czytnika dzienników, które zostanie utworzone.
  • Agent czytnika dzienników pobiera wszystkie rekordy oznaczone do replikacji z dziennika transakcyjnego w partiach i wysyła je do bazy danych dystrybucji.
  • Agent czytnika dzienników pobiera tylko transakcje zatwierdzone z dziennika transakcyjnego bazy danych wydawcy. Tak więc wszelkie długotrwałe zapytania w bazie danych wydawcy mogą bezpośrednio wpływać na replikację, ponieważ czeka ona na zakończenie aktywnej transakcji.

Agent dystrybucji pobiera wszystkie niedystrybuowane nowe polecenia z bazy danych dystrybucji i stosuje je do bazy danych subskrypcji za pomocą mechanizmu wypychania lub ściągania. Jak wspomniano wcześniej, jeśli Dystrybutor subskrypcji Push przejmie prawo własności, aby zastosować zmiany z bazy danych dystrybucji do subskrybenta, podczas gdy w przypadku subskrypcji w trybie pull baza danych subskrybenta przejmie własność, aby pobrać zmiany z bazy danych dystrybucji do subskrybenta.

Po pomyślnym rozesłaniu rekordów z bazy danych Dystrybucja do subskrybenta zostaną one oznaczone jako Rozproszone i do usunięcia z bazy danych Dystrybucja. Jedno z zadań konserwacji replikacji kluczy o nazwie Czyszczenie dystrybucji:Zadanie dystrybucji jest uruchamiane co 10 minut w celu usunięcia rozproszonych rekordów z bazy danych dystrybucji w celu utrzymania pod kontrolą rozmiaru bazy danych dystrybucji.

Dzięki szczegółowemu wyjaśnieniu pojęć replikacji i replikacji transakcyjnej możemy to zrobić, konfigurując replikację dla AdventureWorks bazy danych i weryfikacji replikacji dla każdego komponentu omawianego teoretycznie.

Konfigurowanie replikacji transakcyjnej krok po kroku (poprzez SSMS GUI)

Konfiguracja replikacji transakcyjnej obejmuje 3 główne kroki:

  1. Konfigurowanie bazy danych dystrybucji
  2. Tworzenie publikacji
  3. Tworzenie subskrypcji

Przed próbą skonfigurowania replikacji upewnij się, że komponenty replikacji są zainstalowane jako część instalacji SQL Server lub użyj nośnika SQL Server do zainstalowania komponentów replikacji, ponieważ są one niezbędne do wykonania zadania.

W programie SSMS połącz się z Instancją bazy danych wydawcy i kliknij prawym przyciskiem myszy Replikacja :

Dystrybucja nie jest teraz skonfigurowana. Stąd mamy opcję Konfiguruj dystrybucję. Możemy skonfigurować bazę danych dystrybucji za pomocą kreatora konfiguracji dystrybucji lub za pomocą kreatora tworzenia publikacji.

Aby skonfigurować bazę danych dystrybucji i publikację, wykonaj następujące kroki:

Rozwiń Replikacja i kliknij prawym przyciskiem myszy Nowa publikacja .

Kreator nowej publikacji wystartuje. Kliknij Dalej aby zobaczyć Dystrybutora opcje konfiguracji.

Domyślnie wybiera serwer wydawcy do przechowywania bazy danych dystrybucji. Jeśli chcesz korzystać ze zdalnej bazy danych dystrybucji, wybierz drugą opcję. Kliknij Dalej .

Następną opcją jest skonfigurowanie Folderu migawek . Zmień go na wymagany folder. W przeciwnym razie zostanie domyślnie utworzony w ścieżce folderu instalacyjnego programu SQL Server. Kliknij Dalej .

Wybierz Bazę danych publikacji (tutaj jest AdventureWorks ) i kliknij Dalej .

Wybierz Typ publikacji Replikacja transakcyjna . Kliknij Dalej .

Wybierz Artykuły dla tej publikacji. Do celów testowych wybierz wszystkie Tabele i Widoki :

Przed kliknięciem Dalej , rozwiń tabele jeszcze raz, aby zweryfikować niektóre problemy.

Niektóre tabele są oznaczone czerwonymi ikonami. Kiedy klikamy te tabele, widzimy ostrzeżenie wskazujące, że tabela nie może zostać zreplikowana, ponieważ nie ma klucza podstawowego, jednego z kluczowych wymagań replikacji transakcyjnej. Później omówimy więcej szczegółów. Teraz kliknij Dalej .

Strona z Problemami z artykułami związane z zależnościami. Kliknij Dalej .

Następną opcją jest filtrowanie wierszy tabeli – skoro testujemy replikację podstawową, możemy ją zignorować. Kliknij Dalej .

Skonfiguruj agenta migawek – zignoruj ​​i kliknij Dalej .

Agent Ustawienia – kliknij Ustawienia zabezpieczeń aby skonfigurować konto, aby uruchomić agenta Snapshot i Log Reader Agent pod nim.

Następnie zmień proces agenta migawek do uruchomienia w ramach konta usługi agenta SQL Server.

Ustaw agenta czytnika dzienników Połącz się z wydawcą> Podszywając się pod konto przetwarzania . Kliknij OK .

Agent Security zostanie zaktualizowany.

Dlatego skonfigurowaliśmy Dystrybutora i wszystkie elementy Publikacji jak artykuły , Agent migawek , Agent czytnika dzienników i Papiery wartościowe dla agentów . Prawie zakończyliśmy tworzenie publikacji za pomocą kreatora.

Jeśli chcesz dokładniej zapoznać się ze skryptami TSQL używanymi do tworzenia publikacji, możemy sprawdzić Wygeneruj plik skryptu, aby utworzyć publikację opcja. W przeciwnym razie kliknij Dalej .

Ponieważ zdecydowałem się zapisać plik, kreator pozwala mi ustawić ścieżkę pliku skryptu i imię . Podaj te szczegóły i kliknij Dalej .

Kreator w końcu prosi o nazwę publikacji , nazwałem go AdventureWorks_pub z nazwą bazy danych i słowami kluczowymi, aby wskazać ją jako publikację w celu łatwiejszej identyfikacji.

Zweryfikuj wszystkie dane podane w Podsumowaniu stronę i kliknij Zakończ .

Kreator wyświetli postęp w Tworzeniu publikacji . Po zakończeniu zobaczymy potwierdzenie. Kliknij Zamknij .

Aby zweryfikować pomyślne utworzenie Dystrybutora (Baza danych dystrybucji), rozwiń bazy danych systemu:

Aby zweryfikować pomyślne utworzenie Publikacji , rozwiń Publikacja lokalna :

skonfigurowaliśmy bazę danych dystrybucji i utworzyliśmy bazę danych publikacji w bazie danych AdventureWorks z powodzeniem. Teraz możemy kontynuować Subskrypcję tworzenie

Kliknij prawym przyciskiem myszy nową publikację właśnie utworzyliśmy i wybraliśmy Nowe subskrypcje :

Kreator nowych subskrypcji pojawi się. Aby rozpocząć proces, kliknij Dalej .

Publikacja strona prosi o upewnienie się, że zarówno Publikacja i Wydawca bazy danych są zaznaczone. Kliknij Dalej .

Ustaw agenta dystrybucji albo Push lub Pociągnij Subskrypcja. Będziemy używać serwera wydawców jako subskrybent, a ten typ nie będzie miał żadnego wpływu. Dlatego pozostawiamy domyślne Push Subskrypcja. Kliknij Dalej .

Wybierz Subskrybenci (Baza danych). Wybieram AdventureWorks_REPL przywrócone z tej samej kopii zapasowej bazy danych AdventureWorks. Kliknij Dalej .

Ustaw Bezpieczeństwo agenta :

Ponieważ mam zamiar robić wszystko na jednym serwerze, korzystam z konta usługi agenta .

Następne okno przedstawia Bezpieczeństwo agenta dystrybucji wartości już skonfigurowane. Kliknij Dalej .

Harmonogram synchronizacji – zostaw to domyślnie. Kliknij Dalej .

Zainicjuj subskrypcje – zostaw to z wartościami domyślnymi. Kliknij Dalej .

Po podaniu wszystkich niezbędnych danych będziesz mógł zakończyć proces tworzenia Subskrypcji. Sprawdź Wygeneruj plik skryptu… możliwość późniejszego przestudiowania skryptów i kliknięcia Dalej .

Podaj ścieżkę do zapisania plików, kliknij Dalej .

Spójrz na podsumowanie i sprawdź wszystkie skonfigurowane wartości. Po weryfikacji kliknij Zakończ .

Tworzenie subskrypcji zostało zakończone. Kliknij Zamknij .

Teraz widzimy Subskrypcję wyświetlane w naszej Publikacji .

Skonfiguruj agenta migawek

Naszym następnym krokiem jest praca nad Zrzutem Agent wysłać początkowe dane od Wydawcy do subskrybenta .

Zanim w to wejdziemy, musimy zwrócić uwagę na Monitor replikacji . To krytyczne narzędzie jest dostępne w programie SSMS do przeglądania stanu replikacji na różnych poziomach, na poziomie serwera, na poziomie bazy danych wydawcy, na poziomie subskrypcji i na poziomie agentów replikacji.

Kliknij prawym przyciskiem myszy Replikacja /Publikacja lokalna /Subskrypcja lokalna /Publikacja lub Subskrypcja stworzyliśmy, aby uruchomić Monitor replikacji jak pokazano poniżej:

W Monitorze replikacji , rozwiń Serwer wydawców (RRJ)> Publikacja ([AdventureWorks]:AdventureWorks_pub) aby wyświetlić szczegóły subskrypcji. Kliknij prawym przyciskiem myszy Subskrypcja i wybierz Wyświetl szczegóły .

Jak widzimy, informacje o Początkowym migawce dla naszej publikacji AdventureWorks_pub nie jest jeszcze dostępny. Musimy wykonać zadanie agenta migawki, aby wysłać dane początkowe do bazy danych subskrybentów .

Nie zamykaj tego okna, aby zobaczyć postęp migawki po uruchomieniu zadania agenta migawki .

Kliknij prawym przyciskiem myszy Publikacja > Wyświetl stan agenta migawki :

Agent nigdy nie był uruchamiany komunikat informuje, że nigdy nie wykonywaliśmy agenta migawki. Kliknij Rozpocznij .

Podczas działania agenta migawek możesz obserwować postęp:

Po utworzeniu wszystkich zrzutów zostanie wyświetlony komunikat potwierdzający:

Widzimy nowo utworzone pliki Snapshot w folderze Snapshot, dla którego wcześniej podaliśmy ścieżkę.

Po zastosowaniu wszystkich migawek przez Agenta dystrybucji do bazy danych subskrybentów , wyświetli poniższy stan w otwartym Monitorze replikacji okno:

Gratulacje! Pomyślnie skonfigurowaliśmy replikację transakcyjną za pomocą agenta migawki.

Uwaga :Jeśli mamy ogromną bazę danych wydawców, tworzenie migawki może zająć dużo czasu. Dlatego zaleca się korzystanie z pełnej kopii zapasowej bazy danych Publishera zamiast uruchamiania agenta migawki – omówimy ten problem w kolejnych artykułach.

Weryfikacja komponentów replikacji

Każdy komponent replikacji może być weryfikowany zarówno przez SSMS GUI, jak i zapytania TSQL. Omówimy to w kolejnych artykułach, a tutaj szybko wyjaśnimy, jak wyświetlić właściwości poniższych komponentów.

Wydawca

W programie SSMS kliknij prawym przyciskiem myszy Replikacja > Właściwości wydawcy > Bazy danych publikacji :

Aby wyświetlić szczegółowe informacje o Wydawcy , wykonaj poniższe zapytania w bazie danych dystrybucji.

USE distribution
GO
exec sp_helpdistpublisher
GO
select * from MSpublisher_databases
GO

Subskrybent

Informacje o abonencie można uzyskać za pomocą poniższego zapytania w SSMS.

USE distribution
GO
exec sp_helpsubscriberinfo
GO
select * from MSsubscriber_info

Dystrybutor

W programie SSMS kliknij prawym przyciskiem myszy Replikacja > Dystrybutor Właściwości :

Kliknij Wydawcy aby wyświetlić listę wszystkich wydawców korzystających z tej bazy danych dystrybucji.

W SSMS możemy uruchomić poniższe zapytanie, aby uzyskać te same szczegóły.

USE distribution
GO
exec sp_helpdistributor
GO
exec sp_helpdistributiondb
GO	

Artykuły

Kliknij prawym przyciskiem myszy Publikacja > Właściwości publikacji > Artykuły . Zobaczysz listę wszystkich dostępnych artykułów. Właściwości poszczególnych artykułów można modyfikować, klikając Właściwości artykułu również.

USE AdventureWorks
GO
-- To View all articles available under a Publication
exec sp_helparticle @publication = 'Adventureworks_pub'
GO
-- To View all article columns for a particular article available under a Publication
exec sp_helparticlecolumns @publication = 'Adventureworks_pub', @article = 'Address'
GO
USE distribution
GO
SELECT * from MSArticles

Publikacja

Kliknij prawym przyciskiem myszy Publikacja > Właściwości :

W programie SSMS możemy uruchomić poniższe zapytanie, aby wyświetlić Właściwości publikacji :

USE AdventureWorks
GO
exec sp_helppublication
GO
USE distribution
GO
SELECT * FROM MSPublications

Subskrypcja

Kliknij prawym przyciskiem myszy Subskrypcja > Właściwości subskrypcji :

W SSMS możemy wykonać poniższy skrypt, aby uzyskać informacje o subskrypcji:

USE AdventureWorks
GO
exec sp_helpsubscription
GO
USE distribution
GO
SELECT * FROM MSsubscriptions
GO

Agenci replikacji

W sekcji Zadania SQL Server Agent , możemy znaleźć konkretne Praca stworzony dla wszystkich agentów replikacji:

W SSMS możemy wykonać zapytanie, aby dowiedzieć się, które zadanie jest niezbędne praca agenta czytnika dzienników , Praca agenta migawek i Praca agenta dystrybucyjnego . Poza tym możemy zobaczyć zadanie czyszczenia agenta dystrybucji oraz kilka innych zadań związanych z replikacją utworzonych podczas wewnętrznego ustawiania publikacji i subskrypcji.

Jak działa agent czytnika dzienników

Agent odczytujący dzienniki odczytuje wszystkie zatwierdzone dane z dzienników transakcyjnych bazy danych wydawcy i wypycha je do bazy danych dystrybutora. Mimo że firma Microsoft nie zapewnia oficjalnego sposobu odczytywania dzienników transakcyjnych, istnieje kilka nieudokumentowanych funkcji, takich jak fn_dblog() i fn_dump_dblog() które mogą odczytywać dane z plików dziennika. Jednak te funkcje są nieudokumentowane i nie są objęte pomocą techniczną firmy Microsoft. Dlatego nie będziemy ich dalej badać.

Jak agent dystrybucji dostarcza zmiany danych do bazy danych subskrybentów

Po zapisaniu danych w bazie danych dystrybucji możemy odczytać, w jaki sposób dane są przechowywane w tabelach dystrybucji. W tym celu stosujemy sp_browsereplcmds procedura – pobiera rekordy z MSrepl_commands i MSrepl_transactions tabele.

W celach edukacyjnych weźmy tabelę z 3 kolumnami o nazwie Person.ContactType :

Utworzona Subskrypcja wykona 3 procedury dla każdego artykułu będącego częścią Publikacji w bazie Subskrybentów z poniższymi konwencjami nazewnictwa:

  • dbo.sp_MSins_
  • dbo.sp_MSupd_
  • dbo.sp_MSdel_

W artykule Person.ContactType Table możemy zobaczyć poniższe procedury utworzone w bazie danych subskrybentów:

  • dbo.sp_MSins_PersonContactType WSTAW nowe rekordy przechwycone z bazy danych dzienników transakcji wydawcy, a następnie rozpropagowane do bazy danych dystrybucji.
  • dbo.sp_MSupd_PersonContactType AKTUALIZACJA zmiany przechwycone z bazy danych dzienników transakcji wydawcy, a następnie rozpropagowane do bazy danych dystrybucji.
  • dbo.sp_MSdel_PersonContactType USUŃ records captured from Transaction Logs of Publisher database and then propagated to the distribution database.

Script of the dbo.sp_MSins_PersonContactType Procedure

As you can see, it’s a straightforward INSERT statement that comes out of the distribution database:

ALTER procedure [dbo].[sp_MSins_PersonContactType]
    @c1 int,
    @c2 nvarchar(50),
    @c3 datetime
as
begin  
	insert into [Person].[ContactType] (
		[ContactTypeID],
		[Name],
		[ModifiedDate]
	) values (
		@c1,
		@c2,
		@c3	) 
end  
GO

Script of the dbo.sp_MSupd_PersonContactType Procedure

The script relies on the Primary Key values to identify the unique record for updating:

ALTER procedure [dbo].[sp_MSupd_PersonContactType]
		@c1 int = NULL,
		@c2 nvarchar(50) = NULL,
		@c3 datetime = NULL,
		@pkc1 int = NULL,
		@bitmap binary(1)
as
begin  
	declare @primarykey_text nvarchar(100) = ''
update [Person].[ContactType] set
		[Name] = case substring(@bitmap,1,1) & 2 when 2 then @c2 else [Name] end,
		[ModifiedDate] = case substring(@bitmap,1,1) & 4 when 4 then @c3 else [ModifiedDate] end
	where [ContactTypeID] = @pkc1
if @@rowcount = 0
    if @@microsoftversion>0x07320000
		Begin
			if exists (Select * from sys.all_parameters where object_id = OBJECT_ID('sp_MSreplraiserror') and [name] = '@param3')
			Begin
				
				set @primarykey_text = @primarykey_text + '[ContactTypeID] = ' + convert(nvarchar(100),@pkc1,1)
				exec sp_MSreplraiserror @errorid=20598, @param1=N'[Person].[ContactType]', @[email protected]_text, @param3=13233 
			End
			Else
				exec sp_MSreplraiserror @errorid=20598
		End
end 
GO

Script of the dbo.sp_MSdel_PersonContactType Procedure

This script relies on the Primary Key values to identify a unique record for deleting records from the Subscriber :

ALTER procedure [dbo].[sp_MSdel_PersonContactType]
		@pkc1 int
as
begin  
	declare @primarykey_text nvarchar(100) = ''
	delete [Person].[ContactType] 
	where [ContactTypeID] = @pkc1
if @@rowcount = 0
    if @@microsoftversion>0x07320000
		Begin
			if exists (Select * from sys.all_parameters where object_id = OBJECT_ID('sp_MSreplraiserror') and [name] = '@param3')
			Begin
				
				set @primarykey_text = @primarykey_text + '[ContactTypeID] = ' + convert(nvarchar(100),@pkc1,1)
				exec sp_MSreplraiserror @errorid=20598, @param1=N'[Person].[ContactType]', @[email protected]_text, @param3=13234 
			End
			Else
				exec sp_MSreplraiserror @errorid=20598
		End
end  
GO

This clearly explains why Transactional Replication enforces the Primary Key as a key requirement for tables to be added as part of Replication .

Now, let’s see the Transactional Replication in action. Let’s change some data in the Publisher database. For simplicity, I’ll take the same Person.ContactType tabela.

Executing the SELECT statement on the table yields 20 records:

Next, I INSERTed a sample record into the Person.ContactType tabela:

And, I UPDATE the newly inserted record:

DELETE the newly inserted record from the table:

We need to verify these transactions in Replication using sp_browsereplcmds

Changes from Person.ContactType were captured from the Transactional Logs of Publisher Database (AdventureWorks ) and sent to the Distribution database in the same order. Later, it was propagated to the Subscriber Database (AdventureWorks_REPL ).

Wniosek

Thanks for reading this long power-packed article! We have gone through a variety of topics, such as:

  • Replication Architecture and Terminologies
  • SQL Server Replication Types
  • SQL Server Transactional Replication in Detail
  • SQL Server Transactional Replication Configuration (Default approach)
  • SQL Server Transactional Replication Verification
  • SQL Server Transactional Replication in action

I hope that you’ve found lots of helpful information in this article. In subsequent parts, we’ll explore troubleshooting various issues that are frequently encountered in Replication, and learn how to handle them more efficiently.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Korzyści z używania notacji porządkowej SQL?

  2. Kiedy muszę używać początku/końca bloków i słowa kluczowego Go w programie SQL Server?

  3. Sprawdź, czy tabela ma klucz obcy w SQL Server za pomocą OBJECTPROPERTY()

  4. Len() vs datalength() w SQL Server 2005

  5. Podsłuchiwanie parametrów (lub fałszowanie) w SQL Server