Sdílet prostřednictvím


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 Nelze získat přístup k databázi%.*ls, protože nemá kvorum uzlů pro zajištění vysoké dostupnosti. Zkuste operaci zopakovat později.

Symptoms

Když se pokusíte přidat databázi do skupiny dostupnosti AlwaysOn nebo provést operace čtení a zápisu na primární replice, může se zobrazit následující chyba SQL Serveru 988:

Unable to access database '<DB Name>' because it lacks a quorum of nodes for high availability. (Microsoft SQL Server, Error: 988)

Tato chyba značí, že k databázi není možné získat přístup ani ji přidat, protože požadovaný počet synchronizovaných sekundárních replik není k dispozici pro potvrzení transakce.

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. Pokud požadovaný počet replik není online, připojený a synchronizovaný, může nastat následující problémy, které vedou ke scénářům blokování nebo selhání, které aktivují chybu 988.

  • Primární replika nemůže dokončit potvrzení.
  • Přidání databáze nemůže dokončit proces připojení, protože se zatím nezúčastní sekundárních souborů.

Scenarios

K této chybě může dojít v následujících scénářích:

Scénář 1: Přidání nové databáze

Když do skupiny dostupnosti přidáte novou databázi, sekundární soubory ještě nejsou součástí skupiny a nemůžou potvrzení potvrdit, což způsobuje blokující podmínku.

Scénář 2: Selhání potvrzení za běhu

Pokud je nakonfigurovaná hodnota REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT větší než počet dostupných synchronních sekundárních souborů, které jsou v pořádku, primární nemůže pokračovat s potvrzeními.

Workaround

Pokud chcete tento problém vyřešit, použijte jednu z následujících možností:

Možnost 1: Úprava nastavení REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT

Snížením hodnoty 0 umožníte primárnímu potvrzení bez čekání na synchronní sekundární soubory.

Warning

Tato možnost zlepšuje dostupnost, ale zvyšuje riziko ztráty dat ve scénářích převzetí služeb při selhání.

Použití aplikace SQL Server Management Studio (SSMS)

  1. V nástroji SSMS přejděte na název skupiny dostupnosti.
  2. Right-click the name and select Properties.
  3. Nastavte hodnotu POVINNÉ SYNCHRONIZOVANÉ SEKUNDÁRNÍ SOUBORY NA0 HODNOTU POTVRZENÍ nebo odpovídající hodnotu.

Use T-SQL

Spusťte tento dotaz:

ALTER AVAILABILITY GROUP [AGNAME] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0);

Možnost 2: Předsaděné sekundární repliky (pro přidávání databází)

Před přidáním databáze se ujistěte, že jsou sekundární soubory připravené. Then, use automatic seeding, or manually restore the database on each secondary by using the Join only option.

Troubleshooting

Pokud chcete diagnostikovat a vyřešit tento problém, postupujte takto:

Krok 1: Potvrďte nastavení REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT

Pokud chcete ověřit, jestli REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT je pro vaši skupinu dostupnosti povolené nastavení, použijte SSMS nebo T-SQL. Pokud je 1 hodnota nebo vyšší, přejděte ke kroku 2: Ověřte stav synchronních sekundárních replik.

Use SSMS

  1. V nástroji SSMS přejděte na název skupiny dostupnosti.
  2. Right-click the name and select Properties.
  3. Zkontrolujte hodnotu POVINNÉ SYNCHRONIZOVANÉ SEKUNDÁRNÍ SOUBORY PRO POTVRZENÍ .

Use T-SQL

Na primární replice spusťte následující dotaz:

SELECT name AS Availability_group_name,
       required_synchronized_secondaries_to_commit,
       *
FROM sys.availability_groups;

Note

Tento dotaz lze spustit i v případě, že se začne objevovat chyba 988.

Krok 2: Ověření stavu synchronních sekundárních replik

Pokud chcete zkontrolovat, jestli je připojený, synchronizovaný a v pořádku minimální počet synchronních sekundárních replik, použijte SSMS nebo T-SQL.

Use SSMS

  1. Otevřete řídicí panel skupiny dostupnosti na primární replice.
  2. Zkontrolujte stav sekundárních replik.

Use T-SQL

Spusťte tento dotaz:

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;

Ujistěte se, že počet a CONNECTEDSYNCHRONIZEDrepliky REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT odpovídají HEALTHY nastavení.

Následující rozšířená relace událostí zachycuje nastavení zásad potvrzení a změny stavu synchronizace a diagnostikují, proč požadované sekundární soubory brání potvrzení transakcí ve skupinách dostupnosti AlwaysOn SQL Serveru.

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.