Mamy 2 serwery w grupie AlwaysOn.
Podczas gdy konta użytkowników w każdej zsynchronizowanej bazie danych istnieją na obu serwerach, logowania na poziomie instancji bazy danych istnieją tylko na jednym z serwerów. Tzn. DBINSTANCE-> Bezpieczeństwo-> Loginy brakuje na jednym serwerze.
Dlatego w przypadku przełączenia awaryjnego dostaję błędy logowania na drugim serwerze (który nie ma odpowiednich danych logowania na poziomie instancji).
Jak rozwiązać ten problem? Czy powinienem skonfigurować konto użytkownika w specjalny sposób?
Odpowiedzi:
Rozumiem, że jeśli nie używasz Zawartych baz danych , musisz upewnić się, że logowania są tworzone ręcznie w innych instancjach.
Coś takiego jak ten skrypt z SQLSoldier , pierwotnie opublikowany jako Przenoszenie loginów do kopii lustrzanej bazy danych , powinien załatwić sprawę .
źródło
Msg 7202, Level 11, State 2, Line 1 Could not find server 'otherserver' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.
Musisz użyć Zawartej bazy danych lub ponownie utworzyć użytkowników na innych serwerach z tym samym hasłem i identyfikatorem SID.
Skrypt do wykonania tego zapewnia Microsoft: Jak przenosić loginy i hasła między instancjami SQL Server
Rozwiązanie Marka było częściowo prawidłowe, jednak jego zalecane rozwiązanie dotyczyło lustrzanych baz danych, w przeciwieństwie do AlwaysOn, o co pytają pytania.
źródło
Odpowiadam na post po długim czasie, ale może pomóc komuś innemu z podobnym problemem. Za pomocą programu PowerShell można kopiować dane logowania z repliki podstawowej do replik dodatkowych. Szczegóły można znaleźć tutaj https://maq.guru/synchronizing-sql-server-logins-in-an-always-on-availability-group/ .
Pełne ujawnienie: jestem właścicielem powyższej witryny.
Skrypt PowerShell:
źródło
Musisz używać loginów Domeny Windows i tworzyć je w każdym przypadku. Ponieważ SID jest zarządzany przez Active Directory, będziesz mieć dostęp do wszystkich członków grupy dostępności, jeśli dane logowania istnieją w replice podstawowej. inną opcję musisz użyć certyfikatu.
źródło