Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł ułatwia obejście subskrypcji nie istnieje błąd, który występuje, gdy replika podstawowa dystrybutora przełączy się w tryb failover do repliki, która nie używa tego samego profilu agenta.
Oryginalna wersja produktu: SQL Server 2017 Developer, SQL Server 2017 Enterprise, SQL Server 2017 Enterprise Core
Oryginalny numer KB: 4488815
Symptomy
Rozważmy następujący scenariusz:
- W programie SQL Server 2017 masz agenta dystrybucji, który nie używa domyślnego profilu agenta.
- Baza danych dystrybucji jest dodawana do grupy dostępności.
- Replika podstawowa bazy danych dystrybucji przełączy się w tryb failover do repliki, która nie używa dokładnie tego samego profilu agenta.
W tym scenariuszu agent dystrybucji kończy się niepowodzeniem i zostanie wyświetlony następujący komunikat o błędzie:
Subskrypcja nie istnieje.
Przyczyna
Profile agentów są zarządzane i utrwalane w msdb bazie danych. Zmiany profilu agenta są utrwalane msdb i nie mogą być wysyłane do innych dystrybutorów w bazie danych dystrybucji grupy dostępności.
Agenci replikacji są skojarzeni z profilem za pomocą polecenia profile_id. Po przejściu w tryb failover agent może nie znaleźć prawidłowego profilu. Alternatywnie może się okazać, że nieprawidłowy profil. Ponieważ profil niezdefiniowany w jednym dystrybutorze może się różnić od innego dystrybutora lub nigdy nie istniał lub może mieć inny profile_idelement .
Zadanie agenta dystrybucji wystawia procedurę sp_MShelp_distribution_agentid składowaną w celu pobrania identyfikatora agenta podczas jego uruchamiania. Jeśli profil nie istnieje lub identyfikatory profilów są inne, zadanie agenta dystrybucji nie otrzymuje identyfikatora agenta i zwraca komunikat o błędzie subskrypcji.
Rozwiązanie
Aby obejść ten problem, użyj jednej z następujących metod:
Określ parametry bezpośrednio w poleceniu agenta dystrybucji zamiast używać profilu agenta. Ponadto zastosuj zmiany do zadania agenta dystrybucji we wszystkich replikach dystrybutora.
Upewnij się, że profil agenta został utworzony we wszystkich dystrybutorach uczestniczących w bazie danych dystrybucji grupy dostępności i upewnij się, że identyfikatory profilów są takie same.
Agent dystrybucji uruchamia procedurę sp_MShelp_distribution_agentid składowaną, aby uzyskać profil agenta. Jeśli profil agenta nie istnieje lub jeśli identyfikator profilu jest inny, nie można odnaleźć prawidłowego profilu agenta i zostanie zwrócony komunikat o błędzie Subskrypcja nie istnieje .
Aby zapobiec temu problemowi, określ prawidłowy profil agenta (identyfikator profilu) w procedurze sp_MShelp_distribution_agentid składowanej.
Poniżej przedstawiono segment sp_MShelp_distribution_agentid kodu procedury składowanej:
SELECT distribAgent.id,
distribAgent.name,
distribAgent.publisher_database_id,
distribAgent.publisher_db,
distribAgent.subscriber_db,
profileName.profile_id,
profileName.profile_name
FROM MSdistribution_agents AS distribAgent
INNER JOIN msdb..MSagent_profiles AS profileName
ON distribAgent.profile_id = profileName.profile_id