Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
- SSMS'de kullanılabilirlik grubu adına gidin.
- Right-click the name and select Properties.
-
GEREKLI EŞITLENMİLEN İKlİMLER'i COMMIT değerine veya uygun bir değere
0ayarlayı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
- SSMS'de kullanılabilirlik grubu adına gidin.
- Right-click the name and select Properties.
- 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
- Birincil çoğaltmada Kullanılabilirlik Grupları Panosu'nu açın.
- İ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.