Aby przejść w tryb failover, najpierw należy przełączyć tryby replikacji wystąpienia programu SQL Server przy użyciu języka Transact-SQL (T-SQL).
Następnie można przełączać role w tryb failover i przełączać je przy użyciu programu PowerShell.
Przełączanie trybu replikacji (tryb failover do wystąpienia zarządzanego SQL)
Replikacja między programem SQL Server i usługą SQL Managed Instance jest domyślnie asynchroniczna. Jeśli przechodzisz w tryb failover z programu SQL Server do usługi Azure SQL Managed Instance, przed przełączeniem bazy danych w tryb failover przełącz link do trybu synchronicznego w programie SQL Server przy użyciu języka Transact-SQL (T-SQL).
Uwaga
- Pomiń ten krok, jeśli przechodzisz w tryb failover z usługi SQL Managed Instance do programu SQL Server 2022.
- Replikacja synchroniczna w dużych odległościach sieciowych może spowolnić transakcje w repliki podstawowej.
Uruchom następujący skrypt języka T-SQL w programie SQL Server, aby zmienić tryb replikacji rozproszonej grupy dostępności z asynchronicznego na synchronizację. Zastąpić:
-
<DAGName>
z nazwą rozproszonej grupy dostępności (używanej do utworzenia linku).
-
<AGName>
z nazwą grupy dostępności utworzonej w programie SQL Server (używanym do utworzenia linku).
-
<ManagedInstanceName>
z nazwą wystąpienia zarządzanego.
-- 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);
Aby potwierdzić, że tryb replikacji łącza został pomyślnie zmieniony, użyj następującego dynamicznego widoku zarządzania. Wyniki wskazują SYNCHRONOUS_COMMIT
stan.
-- 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
Po przełączeniu programu SQL Server do trybu zatwierdzania synchronicznego replikacja między dwoma wystąpieniami jest synchroniczna. Jeśli chcesz cofnąć ten stan, wykonaj te same kroki i ustaw wartość AVAILABILITY_MODE
ASYNCHRONOUS_COMMIT
.
Sprawdzanie wartości LSN zarówno w programie SQL Server, jak i w usłudze SQL Managed Instance
Aby ukończyć tryb failover lub migrację, upewnij się, że replikacja do pomocniczej jest zakończona. W tym celu upewnij się, że numery sekwencji dzienników (LSN) w rekordach dziennika dla programu SQL Server i usługi SQL Managed Instance są takie same.
Początkowo oczekuje się, że LSN na podstawowym jest wyższy niż LSN w pomocniczej. Opóźnienie sieci może spowodować opóźnienie replikacji nieco za podstawowym. Ponieważ obciążenie zostało zatrzymane na serwerze podstawowym, sieci LSN będą zgodne i przestaną się zmieniać po pewnym czasie.
Użyj następującego zapytania T-SQL w programie SQL Server, aby odczytać nazwę LSN ostatniego zarejestrowanego dziennika transakcji. Wymiana:
-
<DatabaseName>
w nazwie bazy danych i poszukaj ostatniego numeru LSN ze wzmocnionymi zabezpieczeniami.
-- 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>'
Użyj następującego zapytania T-SQL w usłudze SQL Managed Instance, aby odczytać ostatnio wzmocnioną nazwę LSN dla bazy danych. Zastąp <DatabaseName>
ciąg nazwą bazy danych.
To zapytanie działa w usłudze SQL Managed Instance ogólnego przeznaczenia. W przypadku usługi Krytyczne dla działania firmy SQL Managed Instance usuń komentarz and drs.is_primary_replica = 1
na końcu skryptu. W warstwie usługi Krytyczne dla działania firmy ten filtr zapewnia, że szczegóły są odczytywane tylko z repliki podstawowej.
-- 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
Alternatywnie możesz również użyć polecenia Get-AzSqlInstanceLink PowerShell lub az sql mi link wyświetlić polecenie interfejsu wiersza polecenia platformy Azure, aby pobrać właściwość linku LastHardenedLsn
w usłudze SQL Managed Instance, aby podać te same informacje co poprzednie zapytanie T-SQL.
Ważne
Sprawdź ponownie, czy obciążenie zostało zatrzymane na serwerze podstawowym. Sprawdź, czy sieci LSN są zgodne zarówno z programem SQL Server, jak i usługą SQL Managed Instance, i czy pozostają one zgodne i niezmienione przez jakiś czas. Stabilne sieci LSN w obu wystąpieniach wskazują, że dziennik końcowy został zreplikowany do pomocniczej, a obciążenie zostało skutecznie zatrzymane.
Przełączanie bazy danych w tryb failover
Jeśli chcesz użyć programu PowerShell do przełączenia bazy danych w tryb failover między programem SQL Server 2022 i usługą SQL Managed Instance, zachowując połączenie, lub aby przeprowadzić tryb failover z utratą danych dla dowolnej wersji programu SQL Server, użyj kreatora trybu failover między programem SQL Server i wystąpieniem zarządzanym w programie SSMS, aby wygenerować skrypt dla danego środowiska. Planowane przejście w tryb failover można wykonać z repliki podstawowej lub pomocniczej. Aby przeprowadzić wymuszone przejście w tryb failover, połącz się z repliką pomocniczą.
Aby przerwać połączenie i zatrzymać replikację po przejściu w tryb failover lub migracji bazy danych niezależnie od wersji programu SQL Server, użyj polecenia Remove-AzSqlInstanceLink PowerShell lub az sql mi link delete interfejsu wiersza polecenia platformy Azure.
Uwaga
- Przed przełączeniem w tryb failover zatrzymaj obciążenie źródłowej bazy danych, aby umożliwić replikowanej bazie danych całkowite nadrobienie zaległości i przejście w tryb failover bez utraty danych. Jeśli wykonasz wymuszone przejście w tryb failover lub przerwasz łącze przed dopasowaniem sieci LSN, możesz utracić dane.
- Przełączanie bazy danych w tryb failover w programie SQL Server 2019 i starszych wersjach powoduje przerwanie połączenia między dwiema replikami. Nie można powrócić po awarii do początkowego podstawowego.
Poniższy przykładowy skrypt przerywa połączenie i kończy replikację między replikami, dzięki czemu baza danych jest odczytywana/zapisywana w obu wystąpieniach. Wymiana:
-
<ManagedInstanceName>
z nazwą wystąpienia zarządzanego.
-
<DAGName>
z nazwą linku, który jest przełączony w tryb failover (dane wyjściowe właściwości Name
z Get-AzSqlInstanceLink
polecenia wykonanego wcześniej powyżej).
# 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 pomyślnym przejściu w tryb failover łącze zostanie porzucone i już nie istnieje. Baza danych programu SQL Server i baza danych usługi SQL Managed Instance mogą wykonywać obciążenia odczytu/zapisu, ponieważ są teraz całkowicie niezależne.
Ważne
Po pomyślnym przejściu w tryb failover do usługi SQL Managed Instance ręcznie określ ponownie aplikacje parametry połączenia do nazwy FQDN wystąpienia zarządzanego SQL, aby ukończyć proces migracji lub trybu failover i kontynuować działanie na platformie Azure.
Po usunięciu linku można zachować grupę dostępności w programie SQL Server, ale należy usunąć rozproszoną grupę dostępności, aby usunąć metadane łącza z programu SQL Server. Ten dodatkowy krok jest niezbędny tylko w przypadku przechodzenia w tryb failover przy użyciu programu PowerShell, ponieważ program SSMS wykonuje tę akcję.
Aby usunąć rozproszoną grupę dostępności, zastąp następującą wartość, a następnie uruchom przykładowy kod T-SQL:
-
<DAGName>
z nazwą rozproszonej grupy dostępności w programie SQL Server (używanym do utworzenia linku).
-- Run on SQL Server
USE MASTER
GO
DROP AVAILABILITY GROUP <DAGName>
GO