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

Rozwiązywanie problemów z replikacją serwera SQL

W poprzednim artykule, Konfigurowanie i konfigurowanie replikacji SQL Server, szczegółowo omówiliśmy koncepcję replikacji SQL Server, jej składniki, typy oraz sposób konfiguracji replikacji transakcyjnej SQL krok po kroku. Zdecydowanie zaleca się przejrzenie poprzedniego artykułu i zrozumienie koncepcji replikacji oraz jej składników przed przeczytaniem tego artykułu. W tym artykule zobaczymy, jak rozwiązywać problemy z istniejącą witryną replikacji serwera SQL.

Omówienie rozwiązywania problemów

Głównym celem replikacji SQL Server jest synchronizacja danych wydawcy i subskrybenta. W szczęśliwym scenariuszu, jeśli transakcja zostanie wykonana i zatwierdzona w bazie danych publikacji, zostanie ona skopiowana do bazy danych dystrybucji, a następnie zsynchronizowana i zastosowana do wszystkich subskrybentów połączonych z tym wydawcą. Jeśli problem wystąpi na dowolnym etapie tego procesu, zmiany wydawcy nie będą dostępne po stronie subskrybenta. W takim przypadku musimy jak najszybciej rozwiązać i naprawić ten problem, zanim skończymy z wygasłą witryną replikacji SQL, którą należy ponownie zsynchronizować od zera lub w bazie danych z jej plikiem dziennika transakcji zabraknie wolnego miejsca, wstrzymując wszystkie transakcje bazy danych .

Identyfikowanie, na którym etapie synchronizacja replikacji kończy się niepowodzeniem, i przydzielanie orientacyjnego komunikatu o błędzie, który prowadzi do rozwiązania problemu, jest najtrudniejszą częścią procesu rozwiązywania problemów z replikacją programu SQL Server. Ponadto sprawdzenie czasu ostatniej synchronizacji i zmian wykonanych w/po tym czasie, które mogą spowodować ten błąd, może również pomóc w rozwiązaniu problemu z błędem synchronizacji replikacji.

Zrozumienie roli agenta replikacji programu SQL Server pomoże w określeniu, na którym etapie synchronizacja nie powiedzie się. Przypomnij sobie, że istnieją trzy agenty replikacji, które są wspólne dla większości typów replikacji programu SQL Server. Agent migawek odpowiada za tworzenie początkowej migawki synchronizacji. Agent czytnika dzienników jest odpowiedzialny za odczytywanie zmian z pliku dziennika transakcji bazy danych i kopiowanie go do bazy danych dystrybucji, a na końcu za Dystrybucję agent odpowiedzialny za synchronizację zmian z subskrybentami.

W tym artykule skorzystamy z Monitora replikacji i Monitor aktywności zawodowej okna w monitorowaniu stanu replikacji SQL Server i uzyskiwaniu informacji o wszelkich błędach synchronizacji.

Scenariusze rozwiązywania problemów

Najlepszym i najprostszym sposobem na zrozumienie, jak rozwiązywać problemy z replikacją programu SQL Server, jest przedstawienie praktycznych scenariuszy i pokazanie, jak rozwiązać ten konkretny problem. Zacznijmy omawiać scenariusze jeden po drugim.

Problem z usługą agenta SQL Server

Usługa SQL Server Agent odgrywa kluczową rolę w procesie synchronizacji replikacji SQL Server. Wynika to z faktu, że każdy agent replikacji będzie działał w ramach zadania agenta SQL.

Będąc aktywnym administratorem baz danych, musisz codziennie sprawdzać stan witryny replikacji SQL. Aby sprawdzić stan lokacji replikacji, kliknij prawym przyciskiem myszy Publikacja w węźle Replikacja -> Publikacje lokalne i wybierz Uruchom Monitor replikacji opcja, jak pokazano poniżej:

W oknie Monitora replikacji można zobaczyć komunikat ostrzegawczy, wskazujący, że replikacja wkrótce wygaśnie lub już wygasła, bez żadnego orientacyjnego komunikatu o błędzie, jak poniżej:

Jeśli okno Monitora replikacji nie dostarcza nam żadnych przydatnych informacji o tym, dlaczego witryna replikacji wkrótce wygaśnie, następnym krokiem jest sprawdzenie Monitora aktywności zawodowej w węźle SQL Server Agent. Odwiedzając węzeł SQL Server Agent, zobaczysz bezpośrednio, że usługa SQL Server Agent Service nie jest uruchomiona (z czerwonego kółka obok niej). Jeśli usługa agenta programu SQL Server nie jest uruchomiona, oznacza to, że wszystkie zadania utworzone w ramach tego wystąpienia nie działają, w tym zadania agenta replikacji. W rezultacie ogólna witryna replikacji nie działa.

Aby rozwiązać ten problem, musimy uruchomić usługę SQL Server Agent bezpośrednio z SQL Server Management Studio lub za pomocą SQL Server Configuration Manager (zalecane), jak pokazano poniżej:

Po uruchomieniu usługi SQL Server Agent ponownie sprawdź Monitor replikacji i upewnij się, że stan subskrybenta to Uruchomiony a wszystkie oczekujące transakcje są pomyślnie zsynchronizowane z subskrybentem. Możesz sprawdzić te kroki jeden po drugim, sprawdzając, czy rekordy są kopiowane z sekcji Wydawca do Dystrybutora:

Następnie pomyślnie zsynchronizowano od dystrybutora do subskrybenta, jak poniżej:

I na koniec upewnij się, że nie ma nierozproszonej transakcji z ostatniej zakładki, jak pokazano poniżej:

Następnie musimy się upewnić, że zadania agentów replikacji działają bez problemu. Zadania agenta SQL można sprawdzić, rozwijając węzeł agenta serwera SQL w Eksploratorze obiektów SSMS i wyświetlić monitor aktywności zadania, a następnie sprawdzić, czy agent czytnika dzienników i agent dystrybutora są uruchomione, biorąc pod uwagę, że agent migawek będzie działał tylko podczas proces tworzenia migawki, jak pokazano poniżej:

Możesz także przejrzeć historię zadań agentów replikacji i sprawdzić poprzednią przyczynę niepowodzenia, klikając to zadanie prawym przyciskiem myszy i wybierając Wyświetl historię opcja jak poniżej:

Gdzie możesz znaleźć orientacyjny komunikat o błędzie, który pomoże w rozwiązaniu tego problemu w przyszłości, jak poniżej:

Aby rozwiązać poprzedni problem, tryb uruchamiania usługi SQL Server Agent należy zmienić z ręcznego na automatyczny, w ten sposób upewnisz się, że usługa zostanie uruchomiona automatycznie po ponownym uruchomieniu serwera hostingowego.

Problem z uprawnieniami agenta do migawek

Załóżmy, że podczas sprawdzania stanu replikacji serwera SQL za pomocą Monitora replikacji zauważyłeś błąd replikacji, co widać po znaku X wewnątrz czerwonego okręgu. Monitor replikacji pokazuje, że awaria jest spowodowana przez jednego z agentów replikacji, na podstawie znaku X w czerwonym kółku u góry karty Agenty.

Aby zidentyfikować awarię replikacji, należy przejrzeć zakładkę Agenci i sprawdzić, który agent nie działa. Na stronie Agents zobaczysz, że agent migawki jest tym, który nie działa. Kliknij dwukrotnie agenta migawki i przejrzyj poniższy komunikat o błędzie:

Agent replikacji nie zarejestrował komunikatu o postępie przez 10 minut. Może to wskazywać na brak odpowiedzi agenta lub wysoką aktywność systemu. Sprawdź, czy rekordy są replikowane do miejsca docelowego i czy połączenia z subskrybentem, wydawcą i dystrybutorem są nadal aktywne.

Niestety, ten komunikat o błędzie jest ogólny i pokazuje tylko, że agent migawki nie działa bez podania przyczyny, w następujący sposób:

Następnie musimy poszukać przydatnych informacji w innym miejscu, czyli w pracy Snapshot Agent. W oknie Monitor aktywności zadań, w węźle SQL Server Agent, można zobaczyć, że zadanie Snapshot Agent nie powiodło się. A z tej historii zadań widać, że ostatnio nie powiodło się z powodu problemu z uwierzytelnianiem proxy. Innymi słowy, poświadczenia konta, na którym działa agent migawek, są nieprawidłowe, jak pokazano poniżej:

Aby rozwiązać problem z poświadczeniami agenta migawki, kliknij prawym przyciskiem myszy Publikacja w węźle Replikacja -> Publikacja lokalna i wybierz Właściwości opcja. W oknie Właściwości publikacji przejrzyj Zabezpieczenia agenta i ponownie wprowadź poświadczenia konta, na którym będzie działać agent migawki.

Po odświeżeniu poświadczeń konta Snapshot Agent ponownie uruchom zadanie Snapshot Agent w oknie Monitor aktywności zadań i upewnij się, że zadanie działa poprawnie, jak poniżej:

Sprawdź również, czy agent migawek działa teraz poprawnie, a komunikat o błędzie nie pojawia się już w monitorze replikacji, jak pokazano poniżej:

Problem z uprawnieniami do folderu migawek

Załóżmy, że podczas próby zsynchronizowania wydawcy i subskrybenta przy użyciu początkowej migawki lub ponownej synchronizacji witryny replikacji migawki przy użyciu nowej migawki, proces tworzenia migawki nie powiódł się z następującym komunikatem o błędzie dostępu:

Ten komunikat o błędzie wskazuje, że konto, na którym działa agent migawek, nie ma uprawnień dostępu do folderu migawek określonego w komunikacie o błędzie.

Aby rozwiązać ten problem, musimy sprawdzić konto, pod którym działa agent migawek, na stronie Agent Security okna Publication Properties, jak pokazano poniżej:

Następnie przejrzyj folder migawki określony w komunikacie o błędzie i upewnij się, że to konto migawki ma minimalne uprawnienia do odczytu i zapisu w tym folderze, a następnie ponownie uruchom agenta migawki i zobacz, że problem został rozwiązany, a migawka synchronizacji została pomyślnie utworzona, ponieważ poniżej:

Problem z uprawnieniami subskrybenta

Załóżmy, że podczas sprawdzania stanu witryny replikacji programu SQL Server za pomocą Monitora replikacji widać, że wystąpił błąd u subskrybenta, jak pokazano poniżej:

Jeśli klikniesz ikonę błędu, zobaczysz, że wystąpił błąd podczas próby synchronizacji transakcji od dystrybutora do subskrybenta. Z komunikatu o błędzie jasno wynika, że ​​dystrybutor nie może połączyć się z instancją serwera SQL subskrybenta z powodu problemu z uprawnieniami, jak pokazano poniżej:

Aby rozwiązać ten problem, musimy sprawdzić i odświeżyć poświadczenia używane do łączenia się z instancją subskrybenta. Aby sprawdzić poświadczenia, kliknij prawym przyciskiem myszy Subskrypcję w węźle Replikacja -> Publikacje lokalne -> aktualna nazwa publikacji i wybierz opcję Właściwości. Z Połączenia subskrybenta w polu Subskrybent w oknie Właściwości, odśwież poświadczenia dla konta, które będzie używane do łączenia się z instancją subskrybenta, jak pokazano poniżej:

Następnie ponownie sprawdź stan replikacji w Monitorze replikacji, a zobaczysz, że problem z połączeniem subskrybenta nie jest już dostępny, a witryna replikacji działa normalnie, jak pokazano poniżej:

Abonent nieosiągalny

Innym problemem błędu replikacji programu SQL Server, który możesz napotkać po stronie subskrybenta, jest to, że dystrybutor nie może połączyć się z subskrybentem, pokazując na stronie dystrybutora dla subskrybenta, że ​​nie jest w stanie otworzyć połączenia z subskrybentem z powodu „Sieć Powiązany … ” błąd połączenia, pokazany w oknie Monitora replikacji poniżej:

Ten komunikat o błędzie wskazuje, że istnieje problem z połączeniem między wystąpieniem dystrybutora a wystąpieniem subskrybenta. Pierwszym i najprostszym sposobem sprawdzenia tego problemu z łącznością jest upewnienie się, że wystąpienie subskrybenta programu SQL Server jest w trybie online. Można to sprawdzić w Menedżerze konfiguracji programu SQL Server po stronie subskrybenta. W naszej sytuacji widzimy, że usługa SQL Server po stronie subskrybenta jest zatrzymana. Aby rozwiązać ten problem, uruchom usługę SQL Server i sprawdź w Monitorze replikacji, czy witryna replikacji jest ponownie zsynchronizowana, jak pokazano poniżej. Więcej informacji na temat bardziej zaawansowanych problemów z łącznością SQL można znaleźć w dokumencie Rozwiązywanie problemów z łącznością MS:

Problem z uprawnieniami do bazy danych subskrybentów

Załóżmy, że sprawdzasz stan synchronizacji replikacji programu SQL Server za pomocą Monitora replikacji i okazuje się, że replikacja kończy się niepowodzeniem podczas próby replikacji zmian od dystrybutora do subskrybenta. Klikając na błąd subskrybenta, zobaczysz, że Dystrybutor może skontaktować się z subskrybentem i połączyć się z nim, ale nie może połączyć się z bazą danych subskrypcji z powodu braku uprawnień, jak pokazano poniżej:

Aby rozwiązać ten problem, połącz się z subskrybentem i upewnij się, że konto używane do łączenia się z bazą danych subskrybentów jest członkiem stałej roli bazy danych db_Owner, jak pokazano poniżej:

Następnie ponownie sprawdź Monitor replikacji i upewnij się, że Dystrybutor jest w stanie połączyć się z bazą danych subskrypcji i zreplikować zmiany, jak poniżej:

Problem z różnicami danych

Załóżmy, że jeden z zespołów programistów baz danych twierdzi, że pewne zmiany, które są wykonywane w tabeli Shifts w programie Publisher (SQL1), nie są odzwierciedlone w dziennych raportach uruchamianych w instancji subskrybenta (SQL2), a on dostarczył migawkę poniżej który pokazuje, że zmiany nie są replikowane:

Pierwszym krokiem w sprawdzaniu problemu z synchronizacją replikacji jest otwarcie Monitora replikacji i sprawdzenie, na którym etapie nie działa. W Monitorze replikacji widać, że agent czytnika dzienników nie działa, ponieważ zmiany nie są replikowane od dystrybutora do subskrybenta, ale nie jest zwracany wyraźny komunikat od tego agenta, jak pokazano poniżej:

Ponieważ nie możemy znaleźć znaczącego komunikatu o błędzie z Monitora replikacji, sprawdzimy historię zadania agenta czytnika dzienników za pomocą monitora aktywności zadań, który pokazuje, że poświadczenia dla konta, na którym działa agent czytnika dzienników, są nieprawidłowe , jak pokazano poniżej:

Aby rozwiązać problem z poświadczeniami agenta czytnika dzienników, przejrzyj stronę Zabezpieczenia agenta w oknie Właściwości publikacji i odśwież poświadczenia agenta czytnika dzienników, używając prawidłowych, jak poniżej:

Sprawdzając ponownie Monitor replikacji, zobaczysz, że zmiany zostały pomyślnie zreplikowane, a dane są aktualizowane zgodnie z nowymi zmianami zmian, jak pokazano poniżej:

Nie znaleziono wiersza u subskrybenta

Spójrzmy na sprawę z innej strony. Załóżmy, że nastąpiła zmiana w tabeli przesunięć, jak pokazano poniżej:

Ale ta zmiana nie jest replikowana do subskrybenta, a ogólna witryna replikacji programu SQL Server kończy się niepowodzeniem. Z Monitora Replikacji widać, że nie udaje się to podczas próby zmiany z Dystrybutora na Subskrybenta i nie powiodło się, ponieważ nie jest w stanie zaktualizować tego konkretnego rekordu o ID równym 3, ponieważ ten rekord nie jest dostępna w tabeli bazy danych subskrybentów, jak pokazano poniżej:

Sprawdzając ten rekord po stronie subskrybenta (SQL2), zobaczysz, że rekord nie jest dostępny, jak poniżej:

Aby rozwiązać ten problem, musimy ponownie wstawić ten rekord do tabeli bazy danych subskrybentów i pozwolić dystrybutorowi spróbować go ponownie zaktualizować, rozwiązując problem niepowodzenia synchronizacji replikacji, jak pokazano poniżej:

SQL Server zapewnia nam możliwość kontynuowania działania witryny replikacji, nawet jeśli zostanie znaleziony problem z niespójnością danych, gdzie można później ręcznie naprawić ten problem. Aby to zrobić, w Monitorze replikacji kliknij prawym przyciskiem subskrybenta i wybierz Profil agenta opcja, jak pokazano poniżej:

W wyświetlonym oknie możesz zaktualizować profil agenta czytnika dzienników i zezwolić mu na kontynuowanie replikacji zmian danych w przypadku wystąpienia problemu z niespójnością danych, jak pokazano poniżej:

Problem z niezainicjowaną subskrypcją

Jeśli witryna replikacji pozostanie bez monitorowania przez dłuższy czas, a awaria wystąpiła bez żadnej naprawy przez ponad trzy dni, witryna replikacji wygaśnie, a subskrypcja zostanie oznaczona jako niezainicjowana, oczekująca na ponowną inicjację przy użyciu nowej migawki . Ten sam scenariusz można napotkać podczas tworzenia nowej subskrypcji bez jej inicjowania, jak pokazano poniżej:

Aby rozwiązać ten problem, powinniśmy ponownie zainicjować tę subskrypcję, klikając prawym przyciskiem myszy Subskrypcję w węźle Replikacja -> Lokalne publikacje i rozwinąć Publikację, a następnie wybrać opcję Ponowna inicjalizacja i zaznaczyć tę subskrypcję do inicjalizacji i przygotować ją do otrzymywania nowej migawka, jak pokazano poniżej:

Jeśli stan subskrypcji pozostaje Niezainicjowany po ponownym zainicjowaniu, sprawdź zadanie agenta migawki w oknie Monitor aktywności zadań i zobacz, dlaczego kończy się niepowodzeniem. Z historii zadań agenta migawki zobaczysz, że zadanie nie powiodło się z powodu problemu określającego właściciela tego zadania agenta, jak pokazano poniżej:

Aby rozwiązać ten problem, otwórz zadanie agenta migawki i zmień właściciela zadania na SA lub dowolnego prawidłowego użytkownika administratora, a zadanie zostanie pomyślnie uruchomione, jak poniżej:

Teraz zobaczysz, że stan subskrypcji zmienił się na Uruchomiona, co oznacza oczekiwanie na początkowy zrzut, aby rozpocząć proces synchronizacji, jak pokazano poniżej:

Aby wygenerować nową migawkę, kliknij prawym przyciskiem myszy Publikację w węźle Replikacja-> Publikacje lokalne i wybierz Wyświetl stan agenta migawek opcja.

W otwartym oknie kliknij przycisk Start, aby rozpocząć proces tworzenia migawki. Po pomyślnym utworzeniu migawki zawierającej wszystkie artykuły wydawcy otwórz ponownie Monitor replikacji i sprawdź stan subskrypcji, gdzie zobaczysz, że migawka została zastosowana do subskrybenta i zsynchronizowana z wydawcą, jak pokazano poniżej:

Problem właściciela bazy danych wydawcy

Załóżmy również, że podczas sprawdzania stanu witryny replikacji programu SQL Server za pomocą Monitora replikacji, witryna replikacji uległa awarii i awaria została wykryta u agenta odczytu dzienników. Sprawdzając komunikat o błędzie zwrócony przez tego agenta, okazuje się, że istnieje problem z określeniem aktualnego właściciela bazy danych publikacji, jak pokazano poniżej:

Aby rozwiązać ten problem, musimy zaktualizować obecnego właściciela bazy danych publikacji, zastępując go prawidłowym użytkownikiem bazy danych za pomocą SP_changedbowner systemowa procedura składowana lub po prostu z okna właściwości bazy danych. Następnie uruchom ponownie zadanie agenta odczytu dziennika, korzystając z okna Monitor aktywności zadań, a następnie sprawdź, czy problem z agentem nie jest już dostępny, korzystając z Monitora replikacji, jak pokazano poniżej:

Wniosek

W tym artykule przedstawiliśmy różne problemy, które możesz napotkać podczas korzystania z funkcji replikacji SQL Server do kopiowania danych między różnymi witrynami, oraz przedstawiliśmy sposoby ich rozwiązania.

Zdecydowanie zaleca się aktualizowanie aparatu SQL Server z najnowszymi usługami SP i CU, dzięki czemu wszystkie błędy związane z funkcjami replikacji programu SQL Server zostaną naprawione automatycznie. Wreszcie, jako proaktywny administrator bazy danych SQL Server, obserwuj swoją witrynę replikacji, aby naprawić wszelkie problemy od początku, zanim staną się większe i trudniejsze do naprawienia.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw wszystkie wartości z tabeli do innej tabeli w SQL

  2. Utwórz serwer połączony między dwoma kontenerami platformy Docker z uruchomionym programem SQL Server (przykład T-SQL)

  3. Przypisz wynik dynamicznego sql do zmiennej

  4. CONVERT() z przykładów daty/godziny na ciągi w SQL Server

  5. Nieskończona pętla CTE z OPCJA (maksymalna rekurencja 0)