Replikacja bazy danych to technologia dystrybucji danych z serwera głównego do serwerów pomocniczych. Replikacja działa w oparciu o koncepcję Master-Slave, w której baza danych Master dystrybuuje dane do jednego lub wielu serwerów slave. Replikację można skonfigurować między wieloma instancjami SQL Server na tym samym serwerze LUB można ją skonfigurować między wieloma serwerami baz danych w tych samych lub geograficznie oddzielonych centrach danych.
Istnieją dwie główne zalety korzystania z replikacji SQL Server:
- Dzięki replikacji możemy uzyskać dane niemal w czasie rzeczywistym, które można wykorzystać do celów raportowania. Na przykład, gdy chcesz oddzielić intensywne obciążenie OLTP związane z zapisem na jednym serwerze i intensywne obciążenie odczytu na innym serwerze, możesz skonfigurować replikację, aby dane były zsynchronizowane na obu serwerach.
- Drugą korzyścią jest to, że można zaplanować uruchomienie replikacji w określonym czasie. Na przykład, jeśli chcesz, aby serwer raportów zawierał dane z zakończonego dnia, możesz odpowiednio zaplanować migawkę replikacji. Nie musimy pisać dodatkowej logiki, aby poradzić sobie z bieżącymi danymi.
Replikacja zapewnia dużą elastyczność. Korzystając z replikacji, możemy odfiltrować wiersze, a także możemy replikować podzbiór danych dowolnej tabeli. Możemy zmienić zreplikowane dane lub zreplikować tylko zaktualizować i wstawić i zignorować usunięcia. Możemy również replikować dane z innego systemu baz danych, takiego jak Oracle.
Komponenty replikacji
Istnieje siedem podstawowych składników replikacji programu SQL Server. Poniżej znajduje się lista:
- Wydawca.
- Dystrybutor.
- Abonent.
- Artykuły.
- Publikacja.
- Wypchnij subskrypcję.
- Pociągnij subskrypcję.
Oto szczegóły:
Artykuły
Artykuł to obiekt bazy danych, taki jak tabela SQL lub procedura składowana. Jak wspomniałem powyżej, za pomocą replikacji możemy filtrować dane lub możemy replikować wybraną kolumnę tabeli, stąd kolumny lub wiersze tabeli są traktowane jako artykuły.
Publikacja
Artykuły nie mogą być powielane, dopóki nie staną się częścią publikacji. Publikacja to grupa obiektów Artykuły/Bazy danych. Reprezentuje również zbiór danych, który będzie replikowany przez SQL Server.
Wydawca
Publisher zawiera główną bazę danych, w której znajdują się dane, które należy opublikować. Określa, jakie dane powinny być dystrybuowane wśród wszystkich subskrybentów.
Dystrybutor
Dystrybutor jest pomostem między wydawcą a subskrybentem. Dystrybutor gromadzi wszystkie opublikowane dane i przechowuje je do momentu wysłania do wszystkich subskrybentów. To pomost między wydawcą a subskrybentem. Obsługuje koncepcję wielu wydawców i subskrybentów. Skonfigurowanie dystrybutora na oddzielnym wystąpieniu SQL lub na osobnym serwerze nie jest obowiązkowe. Jeśli go nie skonfigurujemy, wydawca może pełnić rolę dystrybutora. Organizacje, które mają replikację na dużą skalę, mogą skonfigurować dystrybutora w osobnym systemie.
Abonenci
Subskrybent to koniec źródła lub miejsce docelowe, do którego będą przesyłane dane lub zreplikowana publikacja. W replikacji jest jeden wydawca, może mieć wielu subskrybentów.
Wypychanie subskrypcji
W subskrypcji push wydawca aktualizuje dane subskrybentowi. W subskrypcji Push subskrybent jest pasywny. Wydawca wysyła artykuły lub publikacje do wszystkich swoich prenumeratorów. W zależności od wymagań organizacji, podczas tworzenia kreatora replikacji na ekranie można wybrać subskrypcję, która ma być używana. Replikacja transakcji i replikacja peer-to-peer wykorzystuje subskrypcję Push do utrzymania dostępności danych w czasie rzeczywistym.
Wyciągnij subskrypcję
W ramach subskrypcji pull wszyscy subskrybenci żądają nowych lub zaktualizowanych danych od wydawcy. W subskrypcji ściąganej możemy kontrolować, jakie dane lub zmiany danych są potrzebne subskrybentom. Jest to przydatne, gdy nie potrzebujemy natychmiast zmienionych danych.
Typy replikacji
SQL Server obsługuje trzy typy replikacji:
- Replikacja transakcyjna.
- Replikacja migawek.
- Replikacja scalająca.
Replikacja transakcyjna
Replikacja transakcyjna, wszelkie zmiany schematu, zmiany danych w bazie danych wydawcy zostaną zreplikowane w bazie danych subskrybentów. Za każdym razem, gdy w bazie danych wydawcy wystąpią jakiekolwiek operacje aktualizacji, usunięcia lub wstawienia, zmiany są śledzone i wysyłane do baz danych subskrybentów. Replikacja transakcyjna wysyła przez sieć tylko ograniczoną ilość danych. Co więcej, zmiany są niemal w czasie rzeczywistym, dlatego można go użyć do skonfigurowania witryny DR lub do skalowania operacji raportowania. Replikacja transakcyjna jest idealna w następujących sytuacjach:
- Gdy chcesz skonfigurować system, w którym zmiany wprowadzone na wydawcy powinny być natychmiast stosowane do subskrybentów.
- Wydawca ma wysoki niski INSERT, UPDATES i DELETE.
- Jeśli chcesz skonfigurować heterogeniczną replikację, wydawca lub subskrybenci baz danych innych niż SQL Server, takich jak Oracle.
Po wprowadzeniu jakichkolwiek zmian w bazie danych wydawcy, zmiany są rejestrowane w pliku dziennika w bazie danych wydawcy. Witryna dystrybutora / wydawcy, zostaną utworzone dwa miejsca pracy.
- Agent migawek :Zadanie agenta migawki generuje migawkę schematu, dane obiektów, które chcemy zreplikować lub opublikować. Pliki migawki można zapisać na serwerze Publisher lub w lokalizacji sieciowej. Gdy po raz pierwszy inicjujemy replikację, tworzy migawkę i stosuje ją do wszystkich subskrybentów. Agent migawki pozostaje bezczynny, dopóki nie zostanie uruchomiony ręcznie lub zaplanowany na określony czas.
- Agent czytnika dzienników :Zadanie agenta czytnika dzienników działa w sposób ciągły. Odczytuje zmiany (WSTAWIANIE, AKTUALIZACJE i USUWANIE) z dziennika transakcji bazy danych wydawcy i wysyła je do agenta dystrybucji.
- Agent dystrybucyjny :Po pobraniu zmian z agenta czytnika dzienników agent dystrybucji wysyła wszystkie zmiany do subskrybentów.
Kiedy konfigurujemy replikację transakcyjną, wykonuje ona następujące czynności
- Rozpoczyna się, wykonując pierwszą migawkę danych publikacji i obiektów bazy danych oraz migawkę zastosowaną do subskrybentów.
- Agent czytnika logów stale monitoruje T-Log wydawcy i jeśli wystąpią jakiekolwiek zmiany, wysyła je do dystrybutora lub bezpośrednio do subskrybentów.
Poniższy obraz przedstawia sposób działania replikacji transakcyjnej:
Zalety:
- Replikacja transakcji może być używana jako rezerwowy serwer SQL lub może być używana do równoważenia obciążenia lub oddzielania systemu raportowania i systemu OLTP.
- Serwer wydawcy replikuje dane na serwer subskrybenta z małym opóźnieniem.
- Korzystając z replikacji transakcyjnej, można zaimplementować replikację na poziomie obiektu.
- Replikację transakcyjną można zastosować, gdy masz mniej danych do ochrony i powinieneś mieć plan szybkiego odzyskiwania danych.
Wady:
- Po ustanowieniu replikacji zmiany schematu na wydawcy nie są stosowane na serwerze subskrybenta. Musimy wprowadzić te zmiany ręcznie, generując nową migawkę i stosując ją do subskrybentów.
- Jeśli zmienimy serwery, musimy ponownie skonfigurować replikację.
- Jeśli replikacja transakcyjna jest używana jako konfiguracja DR, musimy ręcznie przełączać się w tryb awaryjny.
Replikacja migawek
Replikacja migawek generuje pełny obraz/migawkę publikacji zgodnie ze zdefiniowanym harmonogramem i wysyła pliki migawek do subskrybentów. Gdy nastąpi replikacja migawki, dane docelowe zostaną zastąpione nową migawką. Replikacja migawek jest najlepszą opcją, gdy dane są mniej niestabilne. Na przykład tabele główne, takie jak City, Zipcode, Pincode, są najlepszymi kandydatami do replikacji migawek.
Podczas konfigurowania replikacji migawek zdefiniowane są następujące ważne komponenty:
- Agent migawek :Tworzy kompletny obraz schematu i danych zdefiniowanych w publikacji i przesyła go do dystrybutora. Agent migawki pozostaje bezczynny, dopóki nie zostanie uruchomiony ręcznie LUB zaplanowany na określony czas.
- Agent dystrybutora :Wysyła pliki migawki do subskrybentów i stosuje schemat i dane, zastępując istniejący.
Replikacja migawki wykonuje następujące czynności:
- Zgodnie ze zdefiniowanym harmonogramem agent migawki umieszcza wspólną blokadę na schemacie i danych, które mają zostać opublikowane.
- Cała migawka opublikowanych danych skopiowana na koniec dystrybutora. Agent migawki tworzy trzy pliki
- Plik do utworzonego schematu bazy danych publikowanych danych.
- Plik BCP do eksportu danych w tabelach SQL
- Indeksuj pliki, aby wyeksportować dane indeksu.
- Po utworzeniu plików agent migawki zwalnia współdzielone blokady na publikowanych danych i danych.
- Agenci dystrybutora uruchamiają i zastępują schemat i dane subskrybenta przy użyciu plików utworzonych przez agenta migawek.
Poniższy obraz ilustruje, jak działa replikacja migawek.
Zalety
- Replikacja migawek jest bardzo prosta w konfiguracji. Jeśli dane nie są zmieniane często, replikacja migawek jest bardzo odpowiednią opcją.
- Możesz kontrolować, kiedy wysyłać dane. Na przykład tabela główna, która ma dużą ilość danych, ale zmienia się rzadziej, niż możesz replikować dane, gdy ruch jest niski.
Wady
- Migawka generowana przez agenta migawek zawiera zmienione i niezmienione opublikowane dane, dlatego migawka przesyłana przez sieć może powodować opóźnienia i wpływać na inne operacje.
- Wraz ze wzrostem danych zwiększa się rozmiar zrzutu, a tworzenie i dystrybucja zrzutu do subskrybentów zajmuje więcej czasu.
Replikacja scalająca
Replikacja scalająca może być używana, gdy musimy zarządzać zmianami na wielu serwerach i zmiany te muszą być skonsolidowane.
Gdy skonfigurujemy replikację scalającą, zostaną utworzone następujące komponenty:
- Agent migawek :Agent migawek generuje pierwszą migawkę danych publikacji i obiektów bazy danych. Po utworzeniu migawki zostanie ona udostępniona wszystkim subskrybentom.
- Połącz agenta :Agent scalania jest odpowiedzialny za rozwiązywanie konfliktów między wydawcą a subskrybentami. Wszelkie konflikty są rozwiązywane za pomocą agenta scalania, który wykorzystuje rozwiązywanie konfliktów. W zależności od tego, jak skonfigurowałeś rozwiązywanie konfliktów, konflikty są rozwiązywane przez agenta scalania.
Kiedy konfigurujemy replikację scalającą, wykonuje ona następujące czynności:
- Rozpoczyna się poprzez wykonanie migawki danych publikacji i obiektów bazy danych oraz migawki zastosowanej do subskrybentów.
- Podczas konfigurowania replikacji scalającej tworzy wyzwalacze dla wydawcy i subskrybenta. Wyzwalacze są odpowiedzialne za śledzenie kolejnych zmian i modyfikacji tabeli u wydawcy i subskrybentów.
- Gdy wydawca i subskrybenci połączą się z siecią, zmiany wierszy danych i modyfikacje schematu zostaną ze sobą zsynchronizowane. Podczas łączenia zmian wydawcy i subskrybentów agent scalania rozwiązuje konflikty na podstawie warunków zdefiniowanych w agencie scalania.
Replikacja scalająca jest używana w środowiskach serwer-klient i jest idealna w sytuacjach, w których subskrybenci muszą pobierać dane od wydawcy, wprowadzać zmiany w trybie offline, a następnie synchronizować zmiany z wydawcą i innymi subskrybentami.
Mogą wystąpić praktyczne sytuacje, w których ten sam wiersz jest zmieniany przez różnych wydawców i subskrybentów. W tym czasie agent scalania sprawdzi, jakie rozwiązanie konfliktu zostało zdefiniowane i wprowadzi odpowiednie zmiany.
SQL Server jednoznacznie identyfikuje kolumnę przy użyciu globalnie unikalnego identyfikatora dla każdego wiersza w opublikowanej tabeli. Jeśli tabela ma już kolumnę unikatowego identyfikatora, SQL Server automatycznie używa tej kolumny. W przeciwnym razie doda kolumnę rowguid w tabeli i utworzy indeks na podstawie tej kolumny.
Wyzwalacze zostaną utworzone w opublikowanych tabelach zarówno dla wydawców, jak i subskrybentów. Służą do śledzenia zmian na podstawie zmian w wierszach lub kolumnach.
Poniższy obraz ilustruje, jak działa replikacja scalająca:
Zalety:
- To jedyny sposób, aby zarządzać konsolidacją zmian na danych z wielu serwerów.
Wady:
- Replikacja i synchronizacja obu końców zajmuje dużo czasu.
- Spójność jest niska, ponieważ wiele stron musi być zsynchronizowanych.
- Podczas scalania replikacji mogą wystąpić konflikty, jeśli te same wiersze dotyczą więcej niż jednego subskrybenta i wydawcy. Można to naprawić za pomocą rozwiązywania konfliktów, ale sprawia to, że konfiguracja replikacji jest bardziej skomplikowana.
Kod T-SQL do przeglądu konfiguracji replikacji
Skonfigurowałem replikację migawek i replikację transakcyjną na dwóch instancjach mojego komputera. Za pomocą dynamicznego zarządzania SQL (DMV) możemy sprawdzić konfigurację replikacji. Do przeglądu konfiguracji replikacji możemy użyć kodu T-SQL. Kod skryptu zawiera następujące informacje:
- Nazwa bazy danych subskrybentów.
- Nazwa wydawcy.
- Typ subskrypcji.
- Baza danych wydawców.
- Nazwa agenta replikacji.
Poniżej znajduje się skrypt:
SELECT DistributionAgent.subscriber_db [Subscriber DB], DistributionAgent.publication [PUB Name], RIGHT(LEFT(DistributionAgent.NAME, Len(DistributionAgent.NAME) - ( Len( DistributionAgent.id) + 1 )), Len(LEFT( DistributionAgent.NAME, Len(DistributionAgent.NAME) - ( Len( DistributionAgent.id) + 1 ))) - ( 10 + Len(DistributionAgent.publisher_db) + ( CASE WHEN DistributionAgent.publisher_db = 'ALL' THEN 1 ELSE Len( DistributionAgent.publication) + 2 END ) )) [SUBSCRIBER], ( CASE WHEN DistributionAgent.subscription_type = '0' THEN 'Push' WHEN DistributionAgent.subscription_type = '1' THEN 'Pull' WHEN DistributionAgent.subscription_type = '2' THEN 'Anonymous' ELSE Cast(DistributionAgent.subscription_type AS VARCHAR) END ) [Subscrition Type], DistributionAgent.publisher_db + ' - ' + Cast(DistributionAgent.publisher_database_id AS VARCHAR) [Publisher Database], DistributionAgent.NAME [Pub - DB - Publication - SUB - AgentID] FROM distribution.dbo.msdistribution_agents DistributionAgent WHERE DistributionAgent.subscriber_db <> 'virtual'
Poniżej znajduje się wynik:
Podsumowanie
W tym artykule wyjaśniłem:
- Podstawa i zalety replikacji i jej komponentów.
- Replikacja transakcyjna.
- Replikacja migawek.
- Replikacja scalająca.