Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 | Kan de database '%.*ls' niet openen omdat er geen quorum van knooppunten is voor hoge beschikbaarheid. Probeer de bewerking later opnieuw. |
Symptoms
Wanneer u probeert een database toe te voegen aan een AlwaysOn-beschikbaarheidsgroep of lees-/schrijfbewerkingen uitvoert op de primaire replica, krijgt u mogelijk de volgende SQL Server-fout 988:
Unable to access database '<DB Name>' because it lacks a quorum of nodes for high availability. (Microsoft SQL Server, Error: 988)
Deze fout geeft aan dat de database niet kan worden geopend of toegevoegd omdat het vereiste aantal gesynchroniseerde secundaire replica's niet beschikbaar is om de transactie door te voeren.
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. Als het vereiste aantal replica's niet online, verbonden en gesynchroniseerd is, kunnen de volgende problemen optreden. Dit kan leiden tot blokkerings- of foutscenario's die fout 988 activeren.
- De primaire replica kan doorvoeringen niet voltooien.
- Een database die wordt toegevoegd, kan het joinproces niet voltooien, omdat secundaire databases nog niet deelnemen.
Scenarios
Deze fout kan optreden in de volgende scenario's:
Scenario 1: Een nieuwe database toevoegen
Wanneer een nieuwe database wordt toegevoegd aan de beschikbaarheidsgroep, maken secundaire databases nog geen deel uit van de groep en kunnen ze de doorvoer niet bevestigen, waardoor een blokkeringsvoorwaarde ontstaat.
Scenario 2: Runtime-doorvoerfouten
Wanneer de geconfigureerde waarde REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT groter is dan het aantal beschikbare synchrone secundaire secundaire databases dat in orde is, kan de primaire niet doorgaan met doorvoeringen.
Workaround
Gebruik een van de volgende opties om dit probleem te omzeilen:
Optie 1: De REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT-instelling aanpassen
Als u de waarde verlaagt zodat 0 de primaire database kan worden doorgevoerd zonder te wachten op synchrone secundaire secundaire bestanden.
Warning
Deze optie verbetert de beschikbaarheid, maar verhoogt het risico op gegevensverlies in failoverscenario's.
SQL Server Management Studio (SSMS) gebruiken
- Navigeer naar de naam van de beschikbaarheidsgroep in SSMS.
- Right-click the name and select Properties.
- Stel de WAARDE VEREIST GESYNCHRONISEERDE SECUNDAIRE BESTANDEN IN OP DOORVOEREN op
0of op een geschikte waarde.
Use T-SQL
Voer de volgende query uit.
ALTER AVAILABILITY GROUP [AGNAME] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0);
Optie 2: de secundaire replica's vooraf seeden (voor het toevoegen van databases)
Zorg ervoor dat secundaire databases gereed zijn voordat u een database toevoegt. Then, use automatic seeding, or manually restore the database on each secondary by using the Join only option.
Troubleshooting
Voer de volgende stappen uit om dit probleem vast te stellen en op te lossen:
Stap 1: bevestig de instelling REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
Gebruik SSMS of T-SQL om te controleren of de REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT instelling is ingeschakeld voor uw beschikbaarheidsgroep (AG). Als de waarde is 1 of hoger, gaat u verder met stap 2: Controleer de status van synchrone secundaire replica's.
Use SSMS
- Navigeer naar de naam van de beschikbaarheidsgroep in SSMS.
- Right-click the name and select Properties.
- Controleer de WAARDE VEREIST GESYNCHRONISEERDE SECUNDAIRE BESTANDEN OM DOOR TE VOEREN .
Use T-SQL
Voer de volgende query uit op de primaire replica:
SELECT name AS Availability_group_name,
required_synchronized_secondaries_to_commit,
*
FROM sys.availability_groups;
Note
Deze query kan worden uitgevoerd, zelfs als de 988-fout optreedt.
Stap 2: De status van synchrone secundaire replica's controleren
Als u wilt controleren of het minimale aantal synchrone secundaire replica's is verbonden, gesynchroniseerd en in orde is, gebruikt u SSMS of T-SQL.
Use SSMS
- Open het dashboard Beschikbaarheidsgroepen op de primaire replica.
- Controleer de status van secundaire replica's.
Use T-SQL
Voer de volgende query uit.
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;
Zorg ervoor dat het aantal CONNECTED, SYNCHRONIZEDen HEALTHY replica's overeenkomt met de REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT instelling.
De volgende uitgebreide gebeurtenissessie legt beleidsinstellingen voor doorvoeren en wijzigingen in de synchronisatiestatus vast om vast te stellen waarom vereiste gesynchroniseerde secundaire secundaire bestanden transactiedoorvoeringen voorkomen in SQL Server AlwaysOn-beschikbaarheidsgroepen.
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.