Aracılığıyla paylaş


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 '%.*ls' veritabanına erişilemiyor çünkü yüksek erişilebilirlik için düğümlerin çoğunluğu sağlanmadığı için. İşlemi daha sonra yeniden deneyin.

Symptoms

Veritabanını Always On kullanılabilirlik grubuna eklemeye veya birincil çoğaltmada okuma/yazma işlemleri gerçekleştirmeye çalıştığınızda, aşağıdaki SQL Server hatası 988'i alabilirsiniz:

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

Bu hata, işlemi işlemek için gerekli sayıda eşitlenmiş ikincil çoğaltma kullanılamadığından veritabanına erişilemediği veya eklenemediğine işaret eder.

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. Gerekli çoğaltma sayısı çevrimiçi, bağlı ve eşitlenmemişse, 988 hatasını tetikleyen engelleme veya hata senaryolarına yol açan aşağıdaki sorunlarla karşılaşabilirsiniz.

  • Birincil çoğaltma işlemeleri tamamlayamaz.
  • İkinciller henüz katılmadıkları için eklenen veritabanı birleştirme işlemini tamamlayamaz.

Scenarios

Aşağıdaki senaryolarda bu hatayla karşılaşabilirsiniz:

Senaryo 1: Yeni veritabanı ekleme

Kullanılabilirlik grubuna yeni bir veritabanı eklendiğinde ikinciller henüz grubun parçası değildir ve işlemeyi onaylayamaz ve engelleme koşuluna neden olur.

Senaryo 2: Çalışma zamanı işleme hataları

yapılandırılan değeri REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT kullanılabilir iyi durumdaki zaman uyumlu ikincillerin sayısından büyük olduğunda, birincil işlemelere devam yapamaz.

Workaround

Bu sorunu geçici olarak çözmek için aşağıdaki seçeneklerden birini kullanın:

1. Seçenek: REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT ayarını ayarlama

değerinin 0 indirilmesi, birincilin zaman uyumlu ikincilleri beklemeden işlemesine olanak tanır.

Warning

Bu seçenek kullanılabilirliği artırır ancak yük devretme senaryolarında veri kaybı riskini artırır.

SQL Server Management Studio'yu (SSMS) kullanma

  1. SSMS'de kullanılabilirlik grubu adına gidin.
  2. Right-click the name and select Properties.
  3. GEREKLI EŞITLENMİLEN İKlİMLER'i COMMIT değerine veya uygun bir değere 0 ayarlayın.

Use T-SQL

Aşağıdaki sorguyu çalıştırın:

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

Seçenek 2: İkincil Çoğaltmaları Önceden Dağıtın (Veritabanı Ekleme için)

Veritabanı eklemeden önce ikincillerin hazır olduğundan emin olun. Then, use automatic seeding, or manually restore the database on each secondary by using the Join only option.

Troubleshooting

Bu sorunu tanılamak ve çözmek için şu adımları izleyin:

1. Adım: REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT ayarını onaylayın

Ayarın REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT kullanılabilirlik grubunuz (AG) için etkinleştirilip etkinleştirilmediğini doğrulamak için SSMS veya T-SQL kullanın. Değer 1 veya daha yüksekse , 2. Adım: Zaman uyumlu ikincil çoğaltmaların durumunu doğrulayın bölümüne geçin.

Use SSMS

  1. SSMS'de kullanılabilirlik grubu adına gidin.
  2. Right-click the name and select Properties.
  3. GEREKLI EŞITLENMİLEN İkİYİ İŞLEMEYE değerini denetleyin.

Use T-SQL

Birincil çoğaltmada aşağıdaki sorguyu çalıştırın:

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

Note

988 hatası oluşmaya başlasa bile bu sorgu yürütülebilir.

2. Adım: Zaman uyumlu ikincil çoğaltmaların durumunu doğrulama

En az zaman uyumlu ikincil çoğaltma sayısının bağlı, eşitlenmiş ve iyi durumda olup olmadığını denetlemek için SSMS veya T-SQL kullanın.

Use SSMS

  1. Birincil çoğaltmada Kullanılabilirlik Grupları Panosu'nu açın.
  2. İkincil çoğaltmaların durumunu gözden geçirin.

Use T-SQL

Aşağıdaki sorguyu çalıştırın:

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;

, ve çoğaltmalarının CONNECTEDsayısının ayarıyla eşleştiğinden REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT emin HEALTHY olun. SYNCHRONIZED

Aşağıdaki genişletilmiş olay oturumu, gerekli eşitlenmiş ikincillerin SQL Server Always On kullanılabilirlik gruplarında işlem işlemelerini neden önleduğunu tanılamak için işleme ilkesi ayarlarını ve eşitleme durumu değişikliklerini yakalar.

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.