Abyste mohli převzít služby při selhání, musíte nejprve přepnout režimy replikace instance SQL Serveru pomocí jazyka Transact-SQL (T-SQL).
Potom můžete převzít služby při selhání a přepnout role pomocí PowerShellu.
Přepnutí režimu replikace (převzetí služeb při selhání do SQL MI)
Replikace mezi SQL Serverem a spravovanou instancí SQL je ve výchozím nastavení asynchronní. Pokud provádíte převzetí služeb při selhání z SQL Serveru do služby Azure SQL Managed Instance, před převzetím služeb při selhání databáze přepněte odkaz na synchronní režim na SQL Serveru pomocí jazyka Transact-SQL (T-SQL).
Poznámka:
- Tento krok přeskočte, pokud převezmete služby při selhání ze služby SQL Managed Instance na SQL Server 2022.
- Synchronní replikace napříč velkými síťovými vzdálenostmi může zpomalit transakce na primární replice.
Spuštěním následujícího skriptu T-SQL na SQL Serveru změňte režim replikace distribuované skupiny dostupnosti z asynchronní na synchronizaci. Nahradit:
-
<DAGName>
s názvem distribuované skupiny dostupnosti (používá se k vytvoření odkazu).
-
<AGName>
s názvem skupiny dostupnosti vytvořené na SQL Serveru (používá se k vytvoření odkazu).
-
<ManagedInstanceName>
s názvem vaší spravované instance.
-- Run on SQL Server
-- Sets the distributed availability group to a synchronous commit.
-- ManagedInstanceName example: 'sqlmi1'
USE master
GO
ALTER AVAILABILITY GROUP [<DAGName>]
MODIFY
AVAILABILITY GROUP ON
'<AGName>' WITH
(AVAILABILITY_MODE = SYNCHRONOUS_COMMIT),
'<ManagedInstanceName>' WITH
(AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
Pokud chcete ověřit, že jste režim replikace propojení úspěšně změnili, použijte následující zobrazení dynamické správy. Výsledky označují SYNCHRONOUS_COMMIT
stav.
-- Run on SQL Server
-- Verifies the state of the distributed availability group
SELECT
ag.name, ag.is_distributed, ar.replica_server_name,
ar.availability_mode_desc, ars.connected_state_desc, ars.role_desc,
ars.operational_state_desc, ars.synchronization_health_desc
FROM
sys.availability_groups ag
join sys.availability_replicas ar
on ag.group_id=ar.group_id
left join sys.dm_hadr_availability_replica_states ars
on ars.replica_id=ar.replica_id
WHERE
ag.is_distributed=1
Teď, když jste přepnuli SQL Server na synchronní režim potvrzení, je replikace mezi těmito dvěma instancemi synchronní. Pokud potřebujete tento stav vrátit zpět, postupujte podle stejných kroků a nastavte AVAILABILITY_MODE
hodnotu ASYNCHRONOUS_COMMIT
.
Kontrola hodnot LSN na SQL Serveru i ve spravované instanci SQL
Pokud chcete dokončit převzetí služeb při selhání nebo migraci, ověřte, že je replikace do sekundárního prostředí dokončená. V takovém případě se ujistěte, že jsou stejná pořadová čísla protokolů (LSN) v záznamech protokolu pro SQL Server i spravovanou instanci SQL.
Zpočátku se očekává, že LSN primárního serveru je vyšší než LSN na sekundárním serveru. Latence sítě může způsobit prodlevu replikace poněkud za primárním serverem. Vzhledem k tomu, že úloha byla zastavena na primárním serveru, sítě LSN se po nějaké době změní a přestanou se měnit.
Ke čtení LSN posledního zaznamenaného transakčního protokolu použijte následující dotaz T-SQL na SQL Serveru. Nahrazení:
-
<DatabaseName>
zadejte název databáze a vyhledejte poslední posílené číslo LSN.
-- Run on SQL Server
-- Obtain the last hardened LSN for the database on SQL Server.
SELECT
ag.name AS [Replication group],
db.name AS [Database name],
drs.database_id AS [Database ID],
drs.group_id,
drs.replica_id,
drs.synchronization_state_desc AS [Sync state],
drs.end_of_log_lsn AS [End of log LSN],
drs.last_hardened_lsn AS [Last hardened LSN]
FROM
sys.dm_hadr_database_replica_states drs
inner join sys.databases db on db.database_id = drs.database_id
inner join sys.availability_groups ag on drs.group_id = ag.group_id
WHERE
ag.is_distributed = 1 and db.name = '<DatabaseName>'
Následující dotaz T-SQL ve službě SQL Managed Instance vám umožní přečíst poslední posílený LSN pro vaši databázi. Nahraďte <DatabaseName>
názvem databáze.
Tento dotaz funguje ve spravované instanci SQL pro obecné účely. V případě Pro důležité obchodní informace SQL Managed Instance odkomentujte and drs.is_primary_replica = 1
komentář na konci skriptu. Na úrovni služby Pro důležité obchodní informace tento filtr zajišťuje, že podrobnosti se čtou jenom z primární repliky.
-- Run on SQL managed instance
-- Obtain the LSN for the database on SQL Managed Instance.
SELECT
db.name AS [Database name],
drs.database_id AS [Database ID],
drs.group_id,
drs.replica_id,
drs.synchronization_state_desc AS [Sync state],
drs.end_of_log_lsn AS [End of log LSN],
drs.last_hardened_lsn AS [Last hardened LSN]
FROM
sys.dm_hadr_database_replica_states drs
inner join sys.databases db on db.database_id = drs.database_id
WHERE
db.name = '<DatabaseName>'
-- for Business Critical, add the following as well
-- AND drs.is_primary_replica = 1
Alternativně můžete také použít rutinu Get-AzSqlInstanceLink PowerShell nebo az sql mi link show příkaz Azure CLI k načtení LastHardenedLsn
vlastnosti odkazu ve službě SQL Managed Instance a poskytnout stejné informace jako předchozí dotaz T-SQL.
Důležité
Znovu ověřte, že je vaše úloha zastavená na primárním serveru. Zkontrolujte, jestli se sítě LSN na SQL Serveru i ve spravované instanci SQL Shodují a že zůstanou po určitou dobu stejné a beze změny. Stabilní sítě LSN v obou instancích značí, že se protokol tail replikoval do sekundárního serveru a úloha se efektivně zastaví.
Převzetí služeb při selhání databáze
Pokud chcete použít PowerShell k převzetí služeb při selhání databáze mezi SQL Serverem 2022 a službou SQL Managed Instance při zachování propojení nebo k provedení převzetí služeb při selhání se ztrátou dat pro libovolnou verzi SQL Serveru, použijte průvodce převzetím služeb při selhání mezi SQL Serverem a spravovanou instancí v nástroji SSMS a vygenerujte skript pro vaše prostředí. Plánované převzetí služeb při selhání můžete provést buď z primární nebo sekundární repliky. Pokud chcete provést vynucené převzetí služeb při selhání, připojte se k sekundární replice.
Pokud chcete přerušit propojení a zastavit replikaci při převzetí služeb při selhání nebo migraci databáze bez ohledu na verzi SQL Serveru, použijte příkaz Remove-AzSqlInstanceLink PowerShell nebo az sql mi link delete Azure CLI.
Upozornění
- Před převzetím služeb při selhání zastavte úlohu ve zdrojové databázi, aby replikovaná databáze mohla zcela dohnat a převzít služby při selhání bez ztráty dat. Pokud provedete vynucené převzetí služeb při selhání nebo přerušíte propojení před shodami sítí LSN, může dojít ke ztrátě dat.
- Převzetí služeb při selhání databáze v SQL Serveru 2019 a starších verzích se přeruší a odebere propojení mezi těmito dvěma replikami. Navrácení služeb po obnovení nejde provést zpět na počáteční primární server.
Následující ukázkový skript přeruší propojení a ukončí replikaci mezi vašimi replikami a provede tak čtení a zápis databáze v obou instancích. Nahrazení:
-
<ManagedInstanceName>
s názvem vaší spravované instance.
-
<DAGName>
s názvem odkazu, který provádíte při selhání (výstup vlastnosti Name
z Get-AzSqlInstanceLink
příkazu spuštěného výše).
# Run in Azure Cloud Shell (select PowerShell console)
# =============================================================================
# POWERSHELL SCRIPT TO FAIL OVER OR MIGRATE DATABASE TO AZURE
# ===== Enter user variables here ====
# Enter your managed instance name – for example, "sqlmi1"
$ManagedInstanceName = "<ManagedInstanceName>"
$LinkName = "<DAGName>"
# ==== Do not customize the following cmdlet ====
# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName
# Failover the specified link
Remove-AzSqlInstanceLink -ResourceGroupName $ResourceGroup |
-InstanceName $ManagedInstanceName -Name $LinkName -Force
Po úspěšném převzetí služeb při selhání se propojení zahodí a už neexistuje. Databáze SQL Serveru i databáze SQL Managed Instance můžou spouštět úlohy čtení a zápisu, protože jsou teď zcela nezávislé.
Důležité
Po úspěšném převzetí služeb při selhání do služby SQL Managed Instance ručně nastavte bod aplikací připojovací řetězec na plně kvalifikovaný název domény spravované instance SQL, abyste dokončili proces migrace nebo převzetí služeb při selhání a pokračovali v provozu v Azure.
Po vyřazení odkazu můžete zachovat skupinu dostupnosti na SQL Serveru, ale pokud chcete odebrat metadata propojení z SQL Serveru, musíte odstranit distribuovanou skupinu dostupnosti. Tento další krok je nezbytný pouze při převzetí služeb při selhání pomocí PowerShellu, protože SSMS provede tuto akci za vás.
Pokud chcete odstranit distribuovanou skupinu dostupnosti, nahraďte následující hodnotu a spusťte ukázkový kód T-SQL:
-
<DAGName>
s názvem distribuované skupiny dostupnosti na SQL Serveru (používá se k vytvoření odkazu).
-- Run on SQL Server
USE MASTER
GO
DROP AVAILABILITY GROUP <DAGName>
GO