Udostępnij za pośrednictwem


Link do rozwiązywania problemów — Azure SQL Managed Instance

Dotyczy:Azure SQL Managed Instance

W tym artykule przedstawiono sposób monitorowania i rozwiązywania problemów z linkiem między programem SQL Server i usługą Azure SQL Managed Instance.

Możesz sprawdzić stan łącza za pomocą Transact-SQL (T-SQL), programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure. Jeśli wystąpią problemy, możesz użyć kodów błędów, aby rozwiązać ten problem.

Wiele problemów z tworzeniem linku można rozwiązać, sprawdzanie sieci między dwoma wystąpieniami, a walidacja środowiska została prawidłowo przygotowana linku.

Jeśli wystąpią problemy z linkiem, możesz użyć Transact-SQL (T-SQL), programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure, aby uzyskać informacje o bieżącym stanie linku.

Użyj języka T-SQL, aby uzyskać szczegółowe informacje o stanie połączenia, a następnie użyj programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure, aby uzyskać kompleksowe informacje o bieżącym stanie łącza.

Użyj języka T-SQL, aby określić stan łącza w fazie rozmieszczania lub po rozpoczęciu synchronizacji danych.

Użyj następującego zapytania T-SQL, aby określić stan linku w fazie rozmieszczania w programie SQL Server lub usłudze SQL Managed Instance hostujących bazę danych wstępnie rozstawioną za pośrednictwem linku:

SELECT
    ag.local_database_name AS 'Local database name',
    ar.current_state AS 'Current state',
    ar.is_source AS 'Is source',
    ag.internal_state_desc AS 'Internal state desc',
    ag.database_size_bytes / 1024 / 1024 AS 'Database size MB',
    ag.transferred_size_bytes / 1024 / 1024 AS 'Transferred MB',
    ag.transfer_rate_bytes_per_second / 1024 / 1024 AS 'Transfer rate MB/s',
    ag.total_disk_io_wait_time_ms / 1000 AS 'Total Disk IO wait (sec)',
    ag.total_network_wait_time_ms / 1000 AS 'Total Network wait (sec)',
    ag.is_compression_enabled AS 'Compression',
    ag.start_time_utc AS 'Start time UTC',
    ag.estimate_time_complete_utc as 'Estimated time complete UTC',
    ar.completion_time AS 'Completion time',
    ar.number_of_attempts AS 'Attempt No'
FROM sys.dm_hadr_physical_seeding_stats AS ag
    INNER JOIN sys.dm_hadr_automatic_seeding AS ar
    ON local_physical_seeding_id = operation_id

-- Estimated seeding completion time
SELECT DISTINCT CONVERT(VARCHAR(8), DATEADD(SECOND, DATEDIFF(SECOND, start_time_utc, estimate_time_complete_utc) ,0), 108) as 'Estimated complete time'
FROM sys.dm_hadr_physical_seeding_stats

Jeśli zapytanie nie zwraca żadnych wyników, proces rozmieszczania nie został uruchomiony lub został już ukończony.

Użyj następującego zapytania T-SQL w podstawowym wystąpieniu , aby sprawdzić stan linku, gdy rozpocznie się synchronizacja danych.

DECLARE @link_name varchar(max) = '<DAGname>'
SELECT
   rs.synchronization_health_desc [Link sync health]
FROM
   sys.availability_groups ag 
   join sys.dm_hadr_availability_replica_states rs 
   on ag.group_id = rs.group_id 
WHERE 
   rs.is_local = 0 AND rs.role = 2 AND ag.is_distributed = 1 AND ag.name = @link_name 
GO

Zapytanie zwraca następujące możliwe wartości:

  • brak wyniku: zapytanie zostało wykonane w instancji pomocniczej.
  • HEALTHY: Łącze jest w dobrym stanie, a dane są synchronizowane między replikami.
  • NOT_HEALTHY: łącze jest w złej kondycji, a dane nie są synchronizowane między replikami.

Wartość replicaState opisuje bieżący link. Jeśli stan zawiera również błąd oraz, to wystąpił błąd podczas operacji wymienionej w stanie. Na przykład LinkCreationError wskazuje, że wystąpił błąd podczas tworzenia linku.

Niektóre możliwe wartości replicaState to:

  • CreatingLink: początkowe rozmieszczanie
  • LinkSynchronizing: trwa replikacja danych
  • LinkFailoverInProgress: tryb przełączenia awaryjnego jest w trakcie

Aby uzyskać pełną listę właściwości stanu połączenia, zapoznaj się z poleceniem API REST: Distributed Availability Groups - GET.

Istnieją dwie odrębne kategorie błędów, które można napotkać podczas korzystania z linku — błędy podczas próby zainicjowania linku i błędy podczas próby utworzenia linku.

Podczas inicjowania łącza może wystąpić następujący błąd (stan łącza: LinkInitError):

  • błąd 41962: Operacja została przerwana, ponieważ łącze nie zostało zainicjowane w ciągu 5 minut. Sprawdź połączenie sieciowe i spróbuj ponownie.
  • błąd 41973: nie można ustanowić łącza, ponieważ certyfikat punktu końcowego z programu SQL Server nie został poprawnie zaimportowany do usługi Azure SQL Managed Instance.
  • Błąd 41974: nie można ustanowić łącza, ponieważ certyfikat punktu końcowego z usługi SQL Managed Instance nie został poprawnie zaimportowany do programu SQL Server.
  • Błąd 41976: grupa dostępności nie odpowiada. Sprawdź nazwy i parametry konfiguracji i spróbuj ponownie.
  • Błąd 41986: Nie można ustanowić łącza, ponieważ połączenie nie powiodło się lub replika pomocnicza nie odpowiada. Sprawdź nazwy, parametry konfiguracji i łączności sieciowej, a następnie spróbuj ponownie.
  • Błąd 47521: Nie można ustanowić łącza, ponieważ serwer pomocniczy nie otrzymał żądania. Upewnij się, że grupa dostępności i bazy danych są w dobrej kondycji na serwerze podstawowym i spróbuj ponownie.

Podczas tworzenia łącza może wystąpić następujący błąd (stan łącza: LinkCreationError):

  • Błąd 41977: docelowa baza danych nie odpowiada. Sprawdź parametry łącza i spróbuj ponownie.

Niespójny stan po wymuszonym przełączeniu awaryjnym

Po wymuszonym przełączeniu awaryjnymmoże wystąpić sytuacja podzielonego mózgu, w której obie repliki znajdują się w roli podstawowej, pozostawiając połączenie w stanie niespójnym. Może się to zdarzyć, jeśli nastąpi przełączenie do wtórnej repliki podczas awarii, a następnie replika podstawowa ponownie zacznie działać.

Najpierw upewnij się, że jesteś w scenariuszu podzielonym mózgiem. Można to zrobić przy użyciu programu SQL Server Management Studio (SSMS) lub Transact-SQL (T-SQL).

Połącz się zarówno z programem SQL Server, jak i wystąpieniem zarządzanym SQL w programie SSMS, a następnie w eksploratorze obiektów rozwiń repliki dostępności w węźle grupy dostępności w zawsze włączone. Jeśli dwie różne repliki są wymienione jako (podstawowa) i, to masz do czynienia z sytuacją split-brain.

Alternatywnie można uruchomić następujący skrypt języka T-SQL na zarówno programu SQL Server, jak i usługi SQL Managed Instance, aby sprawdzić rolę replik:

-- Execute on SQL Server and SQL Managed Instance 
USE master
DECLARE @link_name varchar(max) = '<DAGName>'
SELECT
   ag.name [Link name], 
   rs.role_desc [Link role] 
FROM
   sys.availability_groups ag 
   JOIN sys.dm_hadr_availability_replica_states rs 
   ON ag.group_id = rs.group_id 
WHERE 
   rs.is_local = 1 AND ag.is_distributed = 1 AND ag.name = @link_name 
GO

Jeśli oba wystąpienia wymieniają PRIMARY w kolumnie roli Link, znajdujesz się w scenariuszu rozszczepienia mózgu.

Aby rozwiązać stan podzielonego mózgu, najpierw wykonaj kopię zapasową na tej replice, która była oryginalną główną. Jeśli oryginalny podstawowy był programem SQL Server, utwórz kopię zapasową dziennika tail. Jeśli oryginalna podstawowa instancja to SQL Managed Instance, wykonaj kompletną kopię zapasową tylko do kopiowania . Po zakończeniu tworzenia kopii zapasowej ustaw rozproszoną grupę dostępności na rolę pomocniczą dla repliki, którą była oryginalnie repliką podstawową, ale teraz będzie nową repliką pomocniczą.

Na przykład w przypadku rzeczywistej awarii, zakładając, że wymusiłeś przełączenie w tryb failover obciążenia SQL Server do usługi Azure SQL Managed Instance i zamierzasz kontynuować uruchamianie tego obciążenia, wykonaj kopię zapasową loga końcowego w SQL Server, a następnie ustaw rozproszoną grupę dostępności na rolę pomocniczą w SQL Server, jak w poniższym przykładzie:

--Execute on SQL Server 
USE master
ALTER AVAILABILITY GROUP [<DAGName>] 
SET (ROLE = SECONDARY) 
GO 

Następnie wykonaj planowane ręczne przejście w tryb failover z usługi SQL Managed Instance do programu SQL Server przy użyciu linku, takiego jak poniższy przykład:

--Execute on SQL Managed Instance 
USE master
ALTER AVAILABILITY GROUP [<DAGName>] FAILOVER 
GO 

Testowanie łączności sieciowej

Dwukierunkowa łączność sieciowa między programem SQL Server i usługą SQL Managed Instance jest niezbędna, aby połączenie działało. Po otwarciu portów po stronie SQL Server i skonfigurowaniu reguły NSG po stronie wystąpienia zarządzanego SQL, przetestuj łączność przy użyciu programu SQL Server Management Studio (SSMS) lub języka Transact-SQL.

Przetestuj sieć, tworząc tymczasowe zadanie agenta SQL w programie SQL Server i usłudze SQL Managed Instance, aby sprawdzić połączenie między dwoma wystąpieniami. Kiedy używasz Narzędzie do sprawdzania sieci w SSMS, zadanie jest tworzone automatycznie i usuwane po zakończeniu testu. Jeśli testujesz sieć przy użyciu języka T-SQL, musisz ręcznie usunąć zadanie agenta SQL.

Notatka

Wykonywanie skryptów programu PowerShell przez agenta programu SQL Server w programie SQL Server w systemie Linux nie jest obecnie obsługiwane, więc obecnie nie można wykonać Test-NetConnection z zadania agenta programu SQL Server w programie SQL Server w systemie Linux.

Aby przetestować łączność sieciową przy użyciu agenta SQL, potrzebne są następujące wymagania:

  • Użytkownik wykonujący test musi mieć uprawnienia do utworzenia zadania (jako sysadmin lub należąc do roli SQLAgentOperator dla msdb) zarówno dla SQL Server, jak i SQL Managed Instance.
  • Usługa SQL Server Agent musi być uruchomiona na SQL Serverze. Ponieważ agent jest domyślnie włączony w usłudze SQL Managed Instance, nie jest wymagana żadna dodatkowa akcja.

Aby przetestować łączność sieciową między programem SQL Server i usługą SQL Managed Instance w programie SSMS, wykonaj następujące kroki:

  1. Połącz się z wystąpieniem, które będzie repliką podstawową w SSMS.

  2. W Eksploratorze obiektówrozwiń bazy danych, a następnie kliknij prawym przyciskiem myszy bazę danych, którą zamierzasz połączyć z wtórnym. Wybierz Tasks>link Azure SQL Managed Instance>Testuj Połączenie, aby otworzyć kreatora sprawdzania sieci:

    Zrzut ekranu eksploratora obiektów w SSMS, z wybranym połączeniem testowym w menu po kliknięciu prawym przyciskiem myszy na link bazy danych.

  3. Wybierz pozycję Next (Dalej) na stronie Introduction (Wprowadzenie) kreatora sprawdzania sieci .

  4. Jeśli wszystkie wymagania zostały spełnione na stronie Wymagania wstępne, wybierz pozycję Dalej. W przeciwnym razie rozwiąż wszystkie niezaspokojone warunki wstępne, a następnie wybierz pozycję Uruchom ponownie weryfikację.

  5. Na stronie logowania wybierz opcję Login, aby nawiązać połączenie z innym wystąpieniem, które będzie repliką pomocniczą. Wybierz pozycję Dalej.

  6. Sprawdź szczegóły na stronie Określanie opcji sieciowych i w razie potrzeby podaj adres IP. Wybierz pozycję Dalej.

  7. Na stronie podsumowania przejrzyj działania wykonywane przez kreatora, a następnie wybierz pozycję Zakończ, aby przetestować połączenie między dwiema replikami.

  8. Przejrzyj stronę z wynikami, aby sprawdzić, czy istnieje łączność między dwiema replikami, a następnie wybierz Zamknij, aby zakończyć.

Ostrożność

Wykonaj kolejne kroki tylko wtedy, gdy sprawdzono łączność sieciową między środowiskami źródłowymi i docelowymi. W przeciwnym razie przed kontynuowaniem rozwiąż problemy z łącznością sieciową.

Aby uzyskać więcej informacji na temat funkcji linku, zapoznaj się z następującymi zasobami: