Symptomy

Rozpatrzmy następujący scenariusz:

  • W Microsoft SQL Server 2017 masz agent dystrybucji, która nie korzysta z domyślnego profilu agenta.

  • Baza danych dystrybucji jest dodawany do grupy dostępności (AG).

  • Podstawowy replik bazy danych dystrybucji awaryjnie do repliki, która nie korzysta z dokładnie tego samego profilu agenta.

W tym scenariuszu agent dystrybucji nie powiedzie się, i zostanie wyświetlony następujący komunikat o błędzie :

Subskrypcja nie istnieje.

Przyczyna

Profile Agent są zarządzane i utrwalone bazy danych msdb. Zmiany do profilu programu agent są zachowywane w msdb i nie można wysyłać do innych dystrybutorów w bazie danych dystrybucji AG.

Agenci replikacji są skojarzone z profilem za pośrednictwem profile_id. Po przejęciu awaryjnym agent może być nie można znaleźć poprawnego profilu. Alternatywnie to może okazać się niewłaściwy profil. To dlatego profil niestandardowy w jeden dystrybutor może różnić się od innego dystrybutora lub może nigdy nie istniały lub mogą mieć różne profile_id.

Zadanie Agenta dystrybucji wystawia sp_MShelp_distribution_agentidprocedura składowana Aby uzyskać identyfikator agenta podczas uruchamiania. Jeśli profil nie istnieje lub jeśli identyfikatory profilu są różne, zadanie Agenta dystrybucji nie uzyskuje identyfikator agenta i zwraca komunikat o błędzie"subskrypcja nie istnieje".

Obejście

Aby obejść ten problem, użyj jednej z następujących metod.

Metoda 1 Określanie parametrów w poleceniu agenta dystrybucji bezpośrednio, zamiast używać profilu agenta. Także zastosować zmiany do zadania agenta dystrybucji, we wszystkich replikach dystrybutora.

Metoda 2 Upewnij się, że utworzono profil agenta w wszystkich dystrybutorów, które uczestniczą w bazie danych dystrybucji w AG i upewnij się, że identyfikatory profilu są takie same.Sp_MShelp_distribution_agentidprocedura składowana Aby uzyskać profil agent działa agent dystrybucji . Jeżeli nie istnieje profil agenta lub różni się identyfikator profilu, profil zainstalowanego agenta nie zostanie znaleziony, i zwracany jest komunikat o błędzie "subskrypcja nie istnieje".

Aby zapobiec występowaniu tego problemu, określić profil zainstalowanego agenta (identyfikator profilu) w sp_MShelp_distribution_agentid procedury przechowywanej.

Segment kodu procedury przechowywane sp_MShelp_distribution_agentid jest następujące:

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

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?

Dziękujemy za opinię!

×