Dela via


Felsökningslänk – Azure SQL Managed Instance

gäller för:Azure SQL Managed Instance

I den här artikeln lär du dig hur du övervakar och felsöker problem med en länk mellan SQL Server och Azure SQL Managed Instance.

Du kan kontrollera tillståndet för länken med Transact-SQL (T-SQL), Azure PowerShell eller Azure CLI. Om du får problem kan du använda felkoderna för att felsöka problemet.

Många problem med att skapa länken kan lösas genom att kontrollera nätverket mellan de två instanserna och verifiera miljön har förberetts korrekt för länken.

Om du stöter på problem med en länk kan du använda Transact-SQL (T-SQL), Azure PowerShell eller Azure CLI för att få information om länkens aktuella tillstånd.

Använd T-SQL för en snabb statusinformation om länktillståndet och använd sedan Azure PowerShell eller Azure CLI för en omfattande information om länkens aktuella tillstånd.

Använd T-SQL för att fastställa länkens tillstånd under seedningsfasen eller efter att datasynkroniseringen har påbörjats.

Använd följande T-SQL-fråga för att fastställa statusen för länken under seedningsfasen på SQL Server eller SQL Managed Instance som är värd för databasen som är seedad via länken:

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

Om frågan inte returnerar några resultat har seeding-processen inte startats eller har redan slutförts.

Använd följande T-SQL-fråga på den primära-instansen för att kontrollera länkens hälsotillstånd när datasynkroniseringen börjar:

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

Frågan returnerar följande möjliga värden:

  • inget resultat: Frågan kördes på den sekundära instansen.
  • HEALTHY: Länken är felfri och data synkroniseras mellan replikerna.
  • NOT_HEALTHY: Länken är inte felfri och data synkroniseras inte mellan replikerna.

Värdet replicaState beskriver den aktuella länken. Om tillståndet även innehåller Fel uppstod ett fel under åtgärden som anges i tillståndet. Till exempel anger LinkCreationError att ett fel uppstod när länken skapades.

Några möjliga replicaState värden är:

  • CreatingLink: Inledande urval
  • LinkSynchronizing: Datareplikering pågår
  • LinkFailoverInProgress: Redundans pågår

En fullständig lista över egenskaper för länktillstånd finns i kommandot Distribuerade tillgänglighetsgrupper – GET REST API.

Det finns två olika kategorier av fel som du kan stöta på när du använder länken – fel när du försöker initiera länken och fel när du försöker skapa länken.

Följande fel kan inträffa när en länk initieras (länktillstånd: LinkInitError):

  • Fel 41962: Åtgärden avbröts eftersom länken inte initierades inom 5 minuter. Kontrollera nätverksanslutning och försök igen.
  • Fel 41973: Länk kan inte upprättas eftersom slutpunktscertifikat från SQL Server inte importerades till Azure SQL Managed Instance korrekt.
  • Fel 41974: Det går inte att upprätta länken eftersom slutpunktscertifikat från SQL Managed Instance inte importerades korrekt till SQL Server.
  • Fel 41976: Tillgänglighetsgruppen svarar inte. Kontrollera namn och konfigurationsparametrar och försök igen.
  • Fel 41986: Det går inte att upprätta länken eftersom anslutningen misslyckades eller att den sekundära repliken inte svarar. Kontrollera namn, konfigurationsparametrar och nätverksanslutning och försök sedan igen.
  • Fel 47521: Det går inte att upprätta länken eftersom den sekundära servern inte tog emot begäran. Kontrollera att tillgänglighetsgruppen och databaserna är felfria på den primära servern och försök igen.

Följande fel kan inträffa när du skapar en länk (länktillstånd: LinkCreationError):

  • Fel 41977: Måldatabasen svarar inte. Kontrollera länkparametrarna och försök igen.

Inkonsekvent systemtillstånd efter tvingad överlämning

Efter en tvingad redundansväxlingkan du stöta på ett split-brain-scenario där båda replikerna har den primära rollen, vilket lämnar länken i ett inkonsekvent tillstånd. Detta kan inträffa om du redundansväxlar till den sekundära repliken under ett haveri och den primära repliken är online igen.

Bekräfta först att du är i ett scenario med delad hjärna. Du kan göra det med hjälp av SQL Server Management Studio (SSMS) eller Transact-SQL (T-SQL).

Anslut till både SQL Server och SQL-hanterad instans i SSMS och i Object Explorer, expandera Tillgänglighetsrepliker under noden Tillgänglighetsgruppen i Always On High Availability. Om två olika repliker visas som (primär)är du i ett scenario med delad hjärna.

Du kan också köra följande T-SQL-skript på både SQL Server och SQL Managed Instance för att kontrollera replikernas roll:

-- 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

Om båda instanserna listar PRIMÄR i kolumnen för Länkroll, är du i ett delad-hjärna-scenario.

Lös det delade hjärntillståndet genom att först göra en säkerhetskopia på den replik som var den ursprungliga primära. Om den ursprungliga primära var SQL Server tar du en säkerhetskopia av tail log. Om den ursprungliga primära instansen var SQL Managed Instance ska du ta en kopi-endast fullständig säkerhetskopiering. När säkerhetskopieringen är klar anger du den distribuerade tillgänglighetsgruppen till den sekundära rollen för repliken som tidigare var den ursprungliga primära men som nu kommer att vara den nya sekundära.

I händelse av ett verkligt haveri förutsätter du till exempel att du har tvingat fram en redundansväxling av SQL Server-arbetsbelastningen till Azure SQL Managed Instance och tänker fortsätta köra arbetsbelastningen på SQL Managed Instance, göra en säkerhetskopiering av en slutlogg på SQL Server och sedan ange den distribuerade tillgänglighetsgruppen till den sekundära rollen på SQL Server, till exempel följande exempel:

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

Kör sedan en planerad manuell redundansväxling från SQL Managed Instance till SQL Server med hjälp av länken, till exempel följande exempel:

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

Testa nätverksanslutning

Dubbelriktad nätverksanslutning mellan SQL Server och SQL Managed Instance krävs för att länken ska fungera. När du har öppnat portar på SQL Server-sidan och konfigurerat en NSG-regel på SQL Managed Instance-sidan testar du anslutningen med antingen SQL Server Management Studio (SSMS) eller Transact-SQL.

Testa nätverket genom att skapa ett tillfälligt SQL Agent-jobb på både SQL Server och SQL Managed Instance för att kontrollera anslutningen mellan de två instanserna. När du använder Network Checker i SSMS skapas jobbet automatiskt åt dig och tas bort när testet har slutförts. Du måste ta bort SQL Agent-jobbet manuellt om du testar nätverket med hjälp av T-SQL.

Not

Det finns för närvarande inte stöd för att köra PowerShell-skript av SQL Server-agenten på SQL Server i Linux, så det går för närvarande inte att köra Test-NetConnection från SQL Server Agent-jobbet på SQL Server i Linux.

Om du vill använda SQL-agenten för att testa nätverksanslutningen behöver du följande krav:

  • Användaren som utför testet måste ha behörighet att skapa ett jobb (antingen som en sysadmin eller tillhör SQLAgentOperator-rollen för msdb) för både SQL Server och SQL Managed Instance.
  • SQL Server Agent-tjänsten måste köra på SQL Server. Eftersom agenten är aktiverad som standard på SQL Managed Instance krävs ingen ytterligare åtgärd.

Följ dessa steg för att testa nätverksanslutningen mellan SQL Server och SQL Managed Instance i SSMS:

  1. Anslut till den instans som ska vara den primära repliken i SSMS.

  2. I Object Explorerexpanderar du databaser och högerklickar på den databas som du vill länka till den sekundära. Välj Uppgifter>länken Azure SQL Managed Instance>Test Connection för att öppna guiden Nätverkskontroll:

    Skärmbild av objektutforskaren i S S M S, där testanslutningen är markerad i snabbmenyn för databaslänken.

  3. Välj Nästa på sidan Introduktion i verktyget Network Checker.

  4. Om alla krav uppfylls på sidan Förutsättningar väljer du Nästa. Lös annars eventuella ouppfyllda krav och välj sedan Kör validering igen.

  5. På sidan Inloggning väljer du Inloggning för att ansluta till en annan instans som kommer att fungera som den sekundära repliken. Välj Nästa.

  6. Kontrollera informationen på sidan Ange nätverksalternativ och ange en IP-adress om det behövs. Välj Nästa.

  7. På sidan Sammanfattning granskar du de åtgärder som guiden vidtar och väljer sedan Slutför för att testa anslutningen mellan de två replikerna.

  8. Granska sidan Resultat för att verifiera att anslutningen finns mellan de två replikerna, och välj sedan Stäng för att avsluta.

Försiktighet

Fortsätt endast med nästa steg om du har verifierat nätverksanslutningen mellan käll- och målmiljöerna. Annars kan du felsöka problem med nätverksanslutningen innan du fortsätter.

Mer information om länkfunktionen finns i följande resurser: