Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 | Nem érhető el az adatbázis "%.*ls", mert nem rendelkezik csomópontok kvórumával a magas rendelkezésre állás érdekében. Később próbálkozzon újra a művelettel. |
Symptoms
Amikor adatbázist próbál hozzáadni egy Always On rendelkezésre állási csoporthoz, vagy olvasási/írási műveleteket hajt végre az elsődleges replikán, a következő 988-os SQL Server-hiba jelenhet meg:
Unable to access database '<DB Name>' because it lacks a quorum of nodes for high availability. (Microsoft SQL Server, Error: 988)
Ez a hiba azt jelzi, hogy az adatbázis nem érhető el vagy adható hozzá, mert a szinkronizált másodlagos replikák szükséges száma nem érhető el a tranzakció véglegesítéséhez.
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. Ha a szükséges számú replika nincs online, csatlakoztatva és szinkronizálva, a következő problémákat tapasztalhatja, amelyek a 988-as hibát kiváltó blokkolási vagy meghibásodási forgatókönyvekhez vezethetnek.
- Az elsődleges replika nem tudja befejezni a véglegesítéseket.
- A hozzáadott adatbázisok nem tudják befejezni az illesztés folyamatát, mivel a másodfokok még nem vesznek részt a programban.
Scenarios
Ezt a hibát a következő forgatókönyvekben tapasztalhatja:
1. forgatókönyv: Új adatbázis hozzáadása
Amikor új adatbázist ad hozzá a rendelkezésre állási csoporthoz, a másodlagos fájlok még nem részei a csoportnak, és nem tudják nyugtázni a véglegesítést, ami blokkolási feltételt okoz.
2. forgatókönyv: Futtatókörnyezet véglegesítési hibái
Ha a konfigurált érték REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT nagyobb, mint a rendelkezésre álló kifogástalan szinkron másodlagos fájlok száma, az elsődleges nem folytathatja a véglegesítéseket.
Workaround
A probléma megoldásához használja az alábbi lehetőségek egyikét:
1. lehetőség: A REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT beállítása
Az érték csökkentése lehetővé teszi, hogy 0 az elsődleges véglegesítse a szinkronizálási másodlagos fájlokra való várakozás nélkül.
Warning
Ez a beállítás javítja a rendelkezésre állást, de növeli az adatvesztés kockázatát feladatátvételi forgatókönyvekben.
Az SQL Server Management Studio (SSMS) használata
- Lépjen a rendelkezésre állási csoport nevére az SSMS-ben.
- Right-click the name and select Properties.
- Állítsa be a KÖTELEZŐ SZINKRONIZÁLT MÁSODFOKOKAT A VÉGLEGESÍTÉS értékére vagy egy megfelelő értékre
0.
Use T-SQL
Hajtsa végre a következő lekérdezést:
ALTER AVAILABILITY GROUP [AGNAME] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0);
2. lehetőség: A másodlagos replikák elővetése (adatbázisok hozzáadásához)
Az adatbázis hozzáadása előtt győződjön meg arról, hogy a másodfokok készen állnak. Then, use automatic seeding, or manually restore the database on each secondary by using the Join only option.
Troubleshooting
A probléma diagnosztizálásához és megoldásához kövesse az alábbi lépéseket:
1. lépés: A REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT beállítás megerősítése
Annak ellenőrzéséhez, hogy a REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT beállítás engedélyezve van-e a rendelkezésre állási csoportban (AG), használja az SSMS-t vagy a T-SQL-t. Ha az érték 1 nagyobb vagy nagyobb, folytassa a 2. lépésben: Ellenőrizze a szinkron másodlagos replikák állapotát.
Use SSMS
- Lépjen a rendelkezésre állási csoport nevére az SSMS-ben.
- Right-click the name and select Properties.
- Ellenőrizze a KÖTELEZŐ SZINKRONIZÁLT MÁSODFOKOK VÉGLEGESÍTÉSi értékét.
Use T-SQL
Futtassa a következő lekérdezést az elsődleges replikán:
SELECT name AS Availability_group_name,
required_synchronized_secondaries_to_commit,
*
FROM sys.availability_groups;
Note
Ez a lekérdezés akkor is végrehajtható, ha a 988-at érintő hiba bekövetkezik.
2. lépés: A szinkron másodlagos replikák állapotának ellenőrzése
Annak ellenőrzéséhez, hogy a szinkron másodlagos replikák minimális száma csatlakoztatva, szinkronizálva és kifogástalan állapotban van-e, használja az SSMS-t vagy a T-SQL-t.
Use SSMS
- Nyissa meg a Rendelkezésre állási csoportok irányítópultot az elsődleges replikán.
- Tekintse át a másodlagos replikák állapotát.
Use T-SQL
Hajtsa végre a következő lekérdezést:
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;
Győződjön meg arról, hogy a , SYNCHRONIZEDés HEALTHY replikák száma CONNECTEDmegegyezik a REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT beállítással.
Az alábbi bővített esemény munkamenet rögzíti a véglegesítési szabályzat beállításait és a szinkronizálási állapot változásait annak diagnosztizálásához, hogy a szükséges szinkronizált másodlagos fájlok miért megakadályozzák a tranzakciós véglegesítéseket az SQL Server Always On rendelkezésre állási csoportjaiban.
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.