Przywróciłem bazę danych z kopii zapasowej. Baza danych używa replikacji do publikowania na innym serwerze. Zakładając, że przywrócenie bazy danych zepsułoby replikację, próbowałem usunąć replikę i ponownie ją utworzyć (mamy skrypt do jej ponownego utworzenia od zera). Nie jestem pewien, co dokładnie zrobiłem, ale teraz jest w kompletnie popsutym stanie i nie mogę tego naprawić.
Najpierw staram się pozbyć subskrypcji (na serwerze wydawcy):
EXEC sp_dropsubscription @publication = 'PublicationName', @article = N'all', @subscriber = 'SubscriberServerName'
To wydaje się działać. SELECT * FROM syssubscriptions
nie pokazuje wyników. Patrząc na serwerze subskrybenta, SSMS> {SubscriberServer}> Replikacja> Subskrypcje lokalne - subskrypcji tam nie ma.
Więc próbuję usunąć publikację. SSMS> {Serwer}> Replikacja> Lokalne publikacje> {PublicationName}> Usuń. Daje to następujący komunikat o błędzie:
Could not delete publication 'PublicationName'.
Could not drop article. A subscription exists on it.
Changed database context to 'DatabaseName'. (Microsoft SQL Server, Error: 14046)
Ok, więc próbuję upuścić artykuły:
EXEC sp_droparticle @publication = 'PublicationName', @article = N'all'
i otrzymaj ten błąd:
Invalidated the existing snapshot of the publication. Run the Snapshot Agent again to generate a new snapshot.
Msg 14046, Level 16, State 1, Procedure sp_MSdrop_article, Line 75
Could not drop article. A subscription exists on it.
Ok, więc próbuję uruchomić Agenta migawki i otrzymuję ten wewnętrzny wyjątek SQL:
The SQL command 'sp_MSactivate_auto_sub' had returned fewer rows than expected by the replication agent.
Spróbowałem więc alternatywną metodę usuwania artykułu DELETE FROM sysarticles
. Wygląda na to, że zadziałało - teraz pozbyłem się artykułów, ale wciąż pojawia się ten sam błąd „Nie można upuścić publikacji, ponieważ istnieje co najmniej jedna subskrypcja dla tej publikacji”, gdy próbuję usunąć publikację.
Ponownie uruchomiłem SQL Server - nie pomogłem.
Nie wiem, co się tutaj dzieje i jak to naprawić?
BTW, tak się dzieje, gdy dajesz programistom, którzy wiedzą wystarczająco dużo, aby być niebezpiecznym, klucze do bazy danych. Na szczęście nie jest to środowisko produkcyjne ...
źródło
MSPublications
wdistribution
bazie danych ujawniają, że publikacja rzeczywiście zniknęła. Czy jest to oczekiwane?Miałem bałagan z replikacją i rozwiązałem to dzięki temu
To i:
Są wybawcami podczas sprzątania pomieszanych replik.
źródło
Przywrócenie bazy danych spowoduje przerwanie replikacji, więc jest to normalne. Również większość innych komunikatów o błędach jest następstwem, ponieważ nie udało się usunąć wszystkich subskrypcji (a przynajmniej SQL tak uważa).
Wiesz, że masz swojego wydawcę (źródłową bazę danych) i co najmniej jednego subskrybenta (docelową bazę danych) i że są to dwa różne serwery. Chcę tylko wspomnieć, że jest też dystrybutor, który jest na jednym z tych serwerów lub innym, i prawdopodobnie w bazie danych o nazwie dystrybucja. Czasami zawiera przydatne informacje, a czasem rzeczy się przewracają, ponieważ informacje między tymi trzema są niezgodne.
W każdym razie, kiedy sprawdziłeś subskrybentów, czy sprawdziłeś również tę sekcję na serwerze wydawcy , aby upewnić się, że nic więcej nie ma na liście? Jeśli znajdziesz, możesz spróbować usunąć go ręcznie:
Ale zakładając, że naprawdę ich nie ma, wypróbuj to w bazie danych wydawcy:
Poinformuj nas jak to idzie. Replikacja, gdy przejdzie w ten stan, wprawia mnie w zakłopotanie, a inne dobre DBA nie mają nic wspólnego z byciem programistą :-)
źródło
Jedynym sposobem, w jaki udało mi się pozbyć fantomowych replikacji replik, jest porzucenie subskrypcji, artykułów, publikacji. Jeśli nadal istnieją subskrypcje fantomowe, ponownie utwórz publikację, w tym subskrybenta fantomowego. Wydaje się, że działa to szczególnie ze starszymi wersjami.
źródło
to zwykle robię, gdy mam pomieszaną publikację.
jest to trochę brzydkie, ale wielokrotnie działało dla mnie w różnych środowiskach. co to powoduje? że czasem trudno jest zrozumieć to, czasami najlepiej jest zacząć od zera, ale nawet, że trzeba wyjaśnić z bieżącego wydania że jest uszkodzony.
all
residuals
aby umieścić to w kontekście:
Oto, co widzę z monitora replikacji:
a kiedy używam własnego monitora replikacji za pomocą T-SQL :
w ostatnim polu poniżej widać 2 linie - i jednej nie powinno się tam znajdować:
to samo, gdy używam tego skryptu:
Najpierw zrób to, co pokazano w innych odpowiedziach powyżej, jeśli to działa , to dobrze, czasem działa, problem rozwiązany.
byłoby mniej więcej:
Teraz, aby całkowicie pozbyć się tej publikacji, zaczniemy od połączenia z Buscriberem, a następnie z wydawcą, a następnie dystrybutorem zgodnie z poniższym skryptem:
w tym momencie ponownie utwórz publikację, jak zwykle
następnie uruchom migawkę
poczekaj, aż zakończy generowanie migawki
MAYBE YOU DONT NEED TO RUN THE SNAP
- spróbujwithout
uruchomić go najpierw, przez większość czasu działa, możesz również dodać tylko 1-2small
artykuły do publikacji, dzięki czemu przystawka działa szybkoale jeśli uruchomisz migawkę, musisz poczekać, aż zakończy się, zanim przejdziesz do następnego kroku -
drop the publication
po tym generujesz skrypty
drop that publication
zgodnie z poniższym obrazkiem:po tym, mam nadzieję, że kiedy uruchomisz nasze oryginalne skrypty powyżej lub spojrzysz na monitor replikacji, nie zobaczysz wadliwej publikacji, tylko dobre, w moim przypadku tylko jedną:
źródło
Polecenie dotyczyło tego samego problemu na moim pudełku przedprodukcyjnym
Wygląda na to, że pracował nad usunięciem fałszywych wpisów subskrypcji ...
źródło