Sdílet prostřednictvím


Odkaz pro řešení potíží – Azure SQL Managed Instance

platí pro:azure SQL Managed Instance

V tomto článku se dozvíte, jak monitorovat a řešit problémy s odkazem mezi SQL Serverem a spravovanou instancí Azure SQL.

Stav odkazu můžete zkontrolovat pomocí Transact-SQL (T-SQL), Azure PowerShellu nebo Azure CLI. Pokud narazíte na problémy, můžete k vyřešení problému použít kódy chyb.

Mnoho problémů s vytvořením propojení je možné vyřešit kontrolou síťového mezi dvěma instancemi a ověřením prostředí bylo správně připravené pro propojení.

Pokud narazíte na problémy s odkazem, můžete k získání informací o aktuálním stavu odkazu použít Transact-SQL (T-SQL), Azure PowerShell nebo Azure CLI.

K rychlému zobrazení stavu odkazu použijte T-SQL a poté pomocí Azure PowerShellu nebo Azure CLI získejte komplexní informace o aktuálním stavu odkazu.

Pomocí jazyka T-SQL můžete určit stav propojení během počáteční fáze nebo po zahájení synchronizace dat.

Pomocí následujícího dotazu T-SQL určete stav odkazu během fáze inicializace na SQL Serveru nebo ve spravované instanci SQL, která je hostitelem databáze inicializované prostřednictvím odkazu:

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

Pokud dotaz nevrátí žádné výsledky, buď se proces nasazení ještě nezačal, nebo již byl dokončen.

Pomocí následujícího dotazu T-SQL na primární instanci zkontrolujte stav propojení po zahájení synchronizace dat:

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

Dotaz vrátí následující možné hodnoty:

  • žádný výsledek: Dotaz byl proveden v sekundární instanci.
  • HEALTHY: Propojení je v pořádku a data se synchronizují mezi replikami.
  • NOT_HEALTHY: Propojení není v pořádku a data se mezi replikami nesynchronují.

Hodnota replicaState popisuje aktuální odkaz. Pokud stav obsahuje také Chyba došlo k chybě během operace uvedené ve stavu. Například LinkCreationError značí, že při vytváření odkazu došlo k chybě.

Mezi možné hodnoty replicaState patří:

  • CreatingLink: Počáteční sázení
  • LinkSynchronizing: Probíhá replikace dat
  • Selhání propojení je v procesu: Probíhá selhání propojení

Úplný seznam vlastností stavu propojení najdete v distribuovaných skupinách dostupnosti – PŘÍKAZ GET REST API.

Při použití odkazu existují dvě různé kategorie chyb – chyby při pokusu o inicializaci odkazu a chyby při pokusu o vytvoření odkazu.

K následující chybě může dojít při inicializaci propojení (stav propojení: LinkInitError):

Při vytváření odkazu (stav propojení: LinkCreationError) může dojít k následující chybě:

  • Chyba 41977: Cílová databáze neodpovídá. Zkontrolujte parametry propojení a zkuste to znovu.

Nekonzistentní stav po vynuceném převzetí při selhání

Po vynuceném převzetí služeb při selhánímůžete narazit na scénář rozděleného mozku, ve kterém jsou obě repliky v primární roli a propojení tak zůstane v nekonzistentním stavu. K tomu může dojít, pokud během havárie přepnete na sekundární repliku a pak se primární replika vrátí online.

Nejprve ověřte, že jste ve scénáři rozděleného mozku. Můžete to provést pomocí aplikace SQL Server Management Studio (SSMS) nebo Transact-SQL (T-SQL).

Připojte se k SQL Serveru i ke spravované instanci SQL v nástroji SSMS, a potom v Průzkumníku objektůrozbalte Repliky dostupnosti pod uzlem Skupiny dostupnosti v rámci Always On High Availability. Pokud jsou dvě různé repliky uvedené jako (primární), jste ve scénáři rozděleného mozku.

Případně můžete následující skript T-SQL spustit na jak SQL Serveru, tak i SQL Managed Instance, abyste zkontrolovali roli 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

Pokud oba instance uvádějí PRIMÁRNÍ ve sloupci role Propojení, jste ve scénáři rozděleného mozku.

Pokud chcete vyřešit stav rozděleného mozku, nejprve vytvořte zálohu na replice, která byla původní primární. Pokud původní primární server byl SQL Server, proveďte zálohování protokolu tail. Pokud byla původní primární instance SQL Managed Instance, proveďte úplné zálohování typu copy-only. Po dokončení zálohování nastavte distribuovanou skupinu dostupnosti na sekundární roli pro repliku, která byla dříve původně primární, ale nyní bude novou sekundární.

Například v případě skutečné havárie za předpokladu, že jste vynutili převzetí služeb při selhání úlohy SQL Serveru do služby Azure SQL Managed Instance a chcete pokračovat ve spouštění úloh ve službě SQL Managed Instance, proveďte zálohu koncového protokolu na SQL Serveru a pak nastavte distribuovanou skupinu dostupnosti na sekundární roli na SQL Serveru, například v následujícím příkladu:

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

Potom prostřednictvím odkazu spusťte plánované ruční převzetí služeb při selhání ze spravované instance SQL na SQL Server, například:

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

Testování připojení k síti

Aby propojení fungovalo, je nezbytné obousměrné síťové připojení mezi SQL Serverem a službou SQL Managed Instance. Po otevření portů na straně SQL Serveru a konfiguraci pravidla NSG na straně služby SQL Managed Instance otestujte připojení pomocí aplikace SQL Server Management Studio (SSMS) nebo Transact-SQL.

Otestujte síť vytvořením dočasné úlohy agenta SQL na SQL Serveru i ve spravované instanci SQL a zkontrolujte připojení mezi těmito dvěma instancemi. Když v SSMS použijete Network Checker, úloha se pro vás automaticky vytvoří a po dokončení testu se odstraní. Pokud otestujete síť pomocí T-SQL, musíte úlohu agenta SQL ručně odstranit.

Poznámka

Spouštění skriptů PowerShellu agentem SQL Serveru na SQL Serveru v Linuxu se v současné době nepodporuje, takže v současné době není možné spustit Test-NetConnection z úlohy agenta SQL Serveru na SQL Serveru v Linuxu.

Pokud chcete k otestování připojení k síti použít agenta SQL, potřebujete následující požadavky:

  • Uživatel provádějící test musí mít oprávnění k vytvoření úlohy buď jako správce systému, nebo musí patřit do role SQLAgentOperator pro msdb, a to jak pro SQL Server, tak pro spravovanou instanci SQL.
  • Služba agenta SQL Serveru musí být spuštěná na SQL Serveru. Vzhledem k tomu, že je agent ve výchozím nastavení ve službě SQL Managed Instance zapnutý, není nutná žádná další akce.

Pokud chcete otestovat síťové připojení mezi SQL Serverem a službou SQL Managed Instance v nástroji SSMS, postupujte takto:

  1. Připojte se k instanci, která bude primární replikou v nástroji SSMS.

  2. V Průzkumník objektůrozbalte databáze a klikněte pravým tlačítkem myši na databázi, kterou chcete propojit se sekundární. Vyberte Úlohy>Azure SQL Managed Instance odkaz>Test připojení, abyste otevřeli průvodce Network Checker.

    Snímek obrazovky průzkumníka objektů v S S M S, s vybranou možností Testovat připojení v kontextové nabídce odkazu na databázi.

  3. Na stránce Úvod v průvodci Kontrola sítě vyberte Další.

  4. Pokud jsou splněny všechny požadavky na stránce Požadavky, vyberte Další. V opačném případě vyřešte všechny nesplněné požadavky a pak vyberte Znovu spustit ověřování.

  5. Na stránce Přihlášení vyberte Přihlášení pro připojení k druhé instanci, která bude sekundární replikou. Vyberte Další.

  6. Zkontrolujte podrobnosti na stránce Zadat možnosti sítě a v případě potřeby zadejte IP adresu. Vyberte Další.

  7. Na stránce Souhrn zkontrolujte akce, které průvodce provede, a pak vyberte Dokončit a otestujte připojení mezi těmito dvěma replikami.

  8. Zkontrolujte stránku Výsledky, abyste ověřili existenci připojení mezi těmito dvěma replikami, a poté vyberte Zavřít k dokončení.

Opatrnost

Pokračujte dalšími kroky jenom v případě, že jste ověřili síťové připojení mezi zdrojovým a cílovým prostředím. V opačném případě před pokračováním vyřešte potíže s připojením k síti.

Další informace o funkci odkazu najdete v následujících zdrojích informací: