Megosztás a következőn keresztül:


MSSQLSERVER_988

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

  1. Lépjen a rendelkezésre állási csoport nevére az SSMS-ben.
  2. Right-click the name and select Properties.
  3. Á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

  1. Lépjen a rendelkezésre állási csoport nevére az SSMS-ben.
  2. Right-click the name and select Properties.
  3. 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

  1. Nyissa meg a Rendelkezésre állási csoportok irányítópultot az elsődleges replikán.
  2. 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.