Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Applies to:SQL Server
Details
| Attribute | Value |
|---|---|
| Product Name | SQL Server |
| Event ID | 988 |
| Event Source | MSSQLSERVER |
| Component | SQLEngine |
| Symbolic Name | DB_HADRON_DATABASE_NO_QUORUM |
| Message Text | Nie można uzyskać dostępu do bazy danych "%.*ls", ponieważ brakuje kworum węzłów w celu zapewnienia wysokiej dostępności. Spróbuj ponownie wykonać operację później. |
Symptoms
Podczas próby dodania bazy danych do zawsze włączonej grupy dostępności lub wykonania operacji odczytu/zapisu w repliki podstawowej może zostać wyświetlony następujący błąd programu SQL Server 988:
Unable to access database '<DB Name>' because it lacks a quorum of nodes for high availability. (Microsoft SQL Server, Error: 988)
Ten błąd wskazuje, że nie można uzyskać dostępu do bazy danych ani dodać jej, ponieważ wymagana liczba zsynchronizowanych replik pomocniczych nie jest dostępna do zatwierdzenia transakcji.
Cause
The REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT setting enforces that the primary replica must wait for a specified number of synchronous secondary replicas to harden each transaction before committing. Jeśli wymagana liczba replik nie jest w trybie online, połączona i zsynchronizowana, mogą wystąpić następujące problemy, co prowadzi do scenariuszy blokowania lub awarii, które wyzwalają błąd 988.
- Replika podstawowa nie może ukończyć zatwierdzeń.
- Dodawana baza danych nie może ukończyć procesu sprzężenia, ponieważ moduły pomocnicze nie uczestniczą jeszcze w tym procesie.
Scenarios
Ten błąd może wystąpić w następujących scenariuszach:
Scenariusz 1. Dodawanie nowej bazy danych
Po dodaniu nowej bazy danych do grupy dostępności pomocnicze nie są jeszcze częścią grupy i nie mogą potwierdzić zatwierdzenia, powodując warunek blokowania.
Scenariusz 2. Błędy zatwierdzania środowiska uruchomieniowego
Jeśli skonfigurowana wartość parametru REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT jest większa niż liczba dostępnych synchronicznych serwerów pomocniczych w dobrej kondycji, podstawowy nie może kontynuować zatwierdzania.
Workaround
Aby obejść ten problem, użyj jednej z następujących opcji:
Opcja 1. Dostosowywanie ustawienia REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
Obniżenie wartości 0 umożliwia zatwierdzanie podstawowego bez oczekiwania na synchroniczne sekundy.
Warning
Ta opcja zwiększa dostępność, ale zwiększa ryzyko utraty danych w scenariuszach trybu failover.
Korzystanie z programu SQL Server Management Studio (SSMS)
- Przejdź do nazwy grupy dostępności w programie SSMS.
- Right-click the name and select Properties.
- Ustaw wartość REQUIRED SYNCD SECONDARIES TO COMMIT (WYMAGANE ZSYNCHRONIZOWANE DANE POMOCNICZE) na
0wartość LUB odpowiednią wartość.
Use T-SQL
Uruchom następujące zapytanie:
ALTER AVAILABILITY GROUP [AGNAME] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0);
Opcja 2. Wstępne rozmieszczanie replik pomocniczych (w przypadku dodawania baz danych)
Przed dodaniem bazy danych upewnij się, że pliki drugie są gotowe. Then, use automatic seeding, or manually restore the database on each secondary by using the Join only option.
Troubleshooting
Aby zdiagnozować i rozwiązać ten problem, wykonaj następujące kroki:
Krok 1. Potwierdzenie ustawienia REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
Aby sprawdzić, czy REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT ustawienie jest włączone dla grupy dostępności, użyj programu SSMS lub języka T-SQL. Jeśli wartość jest 1 lub wyższa, przejdź do kroku 2: Sprawdź stan synchronicznych replik pomocniczych.
Use SSMS
- Przejdź do nazwy grupy dostępności w programie SSMS.
- Right-click the name and select Properties.
- Sprawdź wartość WYMAGANE ZSYNCHRONIZOWANE SEKUNDY DO ZATWIERDZENIA .
Use T-SQL
Uruchom następujące zapytanie w repliki podstawowej:
SELECT name AS Availability_group_name,
required_synchronized_secondaries_to_commit,
*
FROM sys.availability_groups;
Note
To zapytanie można wykonać nawet wtedy, gdy wystąpi błąd 988.
Krok 2. Weryfikowanie stanu synchronicznych replik pomocniczych
Aby sprawdzić, czy minimalna liczba synchronicznych replik pomocniczych jest połączona, zsynchronizowana i w dobrej kondycji, użyj programu SSMS lub języka T-SQL.
Use SSMS
- Otwórz pulpit nawigacyjny grup dostępności w repliki podstawowej.
- Przejrzyj stan replik pomocniczych.
Use T-SQL
Uruchom następujące zapytanie:
SELECT ag.name AS Availability_group_name,
drcs.database_name,
ar.replica_server_name,
ars.role_desc,
ars.connected_state_desc,
ars.synchronization_health_desc,
ars.last_connect_error_description,
ars.last_connect_error_number,
ars.last_connect_error_timestamp,
ar.endpoint_url
FROM sys.dm_hadr_availability_replica_states AS ars
INNER JOIN sys.availability_replicas AS ar
ON ars.replica_id = ar.replica_id
INNER JOIN sys.availability_groups AS ag
ON ar.group_id = ag.group_id
INNER JOIN sys.dm_hadr_database_replica_cluster_states AS drcs
ON ar.replica_id = drcs.replica_id;
Upewnij się, że liczba CONNECTEDreplik , SYNCHRONIZEDi HEALTHY jest zgodna z ustawieniem REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT .
Następująca rozszerzona sesja zdarzeń przechwytuje ustawienia zasad zatwierdzania i zmiany stanu synchronizacji, aby zdiagnozować, dlaczego wymagane zsynchronizowane sekundy uniemożliwiają zatwierdzenia transakcji w zawsze włączonych grupach dostępności programu SQL Server.
CREATE EVENT SESSION [ag_state_change] ON SERVER
ADD EVENT sqlserver.alwayson_ddl_executed
(ACTION (sqlos.system_thread_id, sqlserver.session_id, sqlserver.sql_text)),
ADD EVENT sqlserver.hadr_db_commit_mgr_harden
(ACTION (sqlos.system_thread_id, sqlserver.session_id, sqlserver.sql_text)),
ADD EVENT sqlserver.hadr_db_commit_mgr_set_policy
(ACTION (sqlos.system_thread_id, sqlserver.session_id, sqlserver.sql_text)),
ADD EVENT sqlserver.hadr_db_commit_mgr_update_harden
(ACTION (sqlos.system_thread_id, sqlserver.session_id, sqlserver.sql_text)),
ADD EVENT sqlserver.hadr_db_partner_set_policy
(ACTION (sqlos.system_thread_id, sqlserver.session_id, sqlserver.sql_text)),
ADD EVENT sqlserver.hadr_db_partner_set_sync_state
(ACTION (sqlos.system_thread_id, sqlserver.session_id, sqlserver.sql_text))
ADD TARGET package0.event_file
(SET filename = N'ag_state_change')
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
GO
The hadr_db_commit_mgr_update_harden event could be used to identify the issue. When the issue occurs, the MinSyncCommitFailure status means there aren't enough synchronization secondaries to meet the configured minimum synchronization count.